Инициализировать c с int как EOF, а затем использовать его для getchar ()? - PullRequest
0 голосов
/ 26 февраля 2020

Название в значительной степени говорит само за себя. У меня есть этот код для домашней работы (присланной лектором), которая предназначена для проверки орфографии, и я не вижу причины для c того, чтобы int инициализировался с EOF и затем использовал его для getchar ()? Это ново для меня, спасибо! (У меня нет ничего внутри, потому что это мое задание поместить код туда, и я застрял в вопросе выше)

 int c = EOF;
 while ((c = getchar()) && c != EOF) {

  } 

РЕДАКТИРОВАТЬ: мне сказали, что EOF просто так, что он не ' введите время, если нет ввода, но оно не имеет смысла для меня, так как если c не использует getchar, то время все еще не используется

1 Ответ

0 голосов
/ 26 февраля 2020

Инициализация не функционально требуется.

Имеет приятный атрибут наличия c с инициализированным значением. Полезно для отладки и предотвращения ошибок неинициализированных объектов. Но в этом случае код мог быть int c = 0;, int c;, int c = EOF;, .... без функциональных различий.

int c = EOF;
while ((c = getchar()) && c != EOF) {
  ;
}

ОП: Мне сказали, что EOF просто, чтобы он не входил в while, если нет ввода, но для меня это не имеет смысла, поскольку, если c не использует getchar, while все еще не используется

Если есть без ввода, c = getchar() будет назначен EOF на c, перезаписывая инициализацию EOF int c = EOF;. В этом случае тело l oop не вводится даже без инициализации.


Теперь дискуссия может перейти к «что должно быть сделано», поскольку инициализация функционально не требуется. Эта и многие другие подобные проблемы лучше всего решаются стандартами кодирования вашей группы. Не имея группового стандарта, следуйте указаниям вашего клиента (профессор?). Отсутствие этого свинца, go просто так: int c;


while ((c = getchar()) && c != EOF) { - это анти-паттерн, так как он останавливает l oop, когда происходит конец файла или если нулевой символ читается. @ wildplasser Ниже приведена более распространенная информация, но выбор зависит от ваших целей кодирования.

while ((c = getchar()) != EOF) {

OP: Пока что я инициализировал переменные только с char, когда используя getchar (), думал, что это должен быть символ.

int getchar(void); обычно возвращает 257 различных значений, [0...UCHAR_MAX] и EOF. Сохранение этого в char теряет информацию. Используйте int.

...