2013-05-07 2 views
-1

Пусть этот while цикл:Как компилятор имеет дело с `(c = getchar())! = EOF`?

while ((c = getchar()) != EOF) 
     ^^^^^^^^^^^^^  
     assignment 

Как вы можете видеть, что мы будем сравнивать задание EOF, как это может быть случилось? Насколько я знаю, назначение не возвращает никакого значения, так что вы не можете сравнить задание (правильно?)

+1

присвоение обычно возвращает значение: вы можете использовать это для «a = b = c = 0;» или в таком состоянии, как в вашем примере ... –

+1

Это выражение, а не просто назначение на языке C. – BLUEPIXY

+0

Вам нужно привыкнуть к понятиям ** значения ** и ** побочного эффекта ** (под) выражений. Значение ** ** 'c = getchar()' в основном, независимо от того, что пользователь набрал; ** побочный эффект ** меняет значение 'c'. – pmg

ответ

3

Выражение присваивания возвращает присвоенное значение, в случае while ((c = getchar()) != EOF) вы сравниваете следующий символ из стандартного ввода (что возвращает getchar() - это присвоенное значение) с EOF.

0

всякий раз, когда мы вызываем getchar(), он считывает следующий символ ввода и возвращает его вам. Функция возвращает int, являющийся кодом ASCII соответствующего символа, но вы можете назначить результат переменной char, если хотите. Таким образом, переменная c получает значение, которое окончательно сравнивается с EOF. Этот цикл будет работать до тех пор, пока файл не достигнет конца.

Смежные вопросы