Инициализация не функционально требуется.
Имеет приятный атрибут наличия 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
.