Причина, по которой это
if (strcmp(a,b) == 0) { }
неверно, поскольку fgets()
хранит \n
в конце буфера.Итак, здесь массив a
выглядит как house
, а массив b
выглядит как house\n
(если клавиша ENTER
была нажата после ввода символов ввода) и strcmp(a,b)
не возвращает 0
.Со страницы справочника fgets()
fgets()
считывает из потока не более одного символа меньшего размера и сохраняет их в буфере, указанном s.Чтение останавливается после EOF или новой строки. Если читается новая строка, она сохраняется в буфере. Завершающий нулевой байт ('\ 0') сохраняется после последнего символа в буфере.
В одну сторонудолжен использовать strcspn()
, который удаляет завершающий \n
.Например,
fgets(a,n,stdin);
a[strcspn(a, "\n")] = 0;
Теперь сравните массив символов как
if (strcmp(a,b) == 0) {
printf("The strings are equal.\n");
}
else {
printf("The strings are not equal.\n");
}