Нужно закончить цикл если ввели пустой ряд или нажали EOF
Цикл не заканчивается при EOF, но при пустом ряде заканчивается.
В чём может быть проблема? При EOF должен закончиться немедленно.
Пробовал писать и if(a[0]==EOF) break; но ничего не меняет.
char a[50], k[50], i = 0, b[50];
a[0] = 2;
int l;
while (a[0] != EOF && a[0] != 0) {
gets(a);
b[i] = check(a);
i++;
}
Ответы (1 шт):
Автор решения: KoVadim
→ Ссылка
Давайте посмотрим на описание функции https://en.cppreference.com/w/c/io/gets
Там нигде не сказано, что она будет возвращать EOF в первом символе. (Если что, EOF это число, равное -1). Там просто сказано, что эта функция возвратит NULL в случае завершения/ошибки. Поэтому, этот цикл обычно переписывается вот так
while(gets(a) != NULL){
b[i]=check(a);
i++;
}
Да, особые ценители могут написать так
while(gets(a)){
b[i]=check(a);
i++;
}
(о том, что gets считается небезопасной и о том, что код сам чуточку странненький, я умолчу)