Я пытался решить проблему 1.6 в K & R. вопрос -с = (! GetChar() = EOF)
- Убедитесь, что выражение
getchar() != EOF
является 0 или 1.
Я нашел решение, которое работает:
#include <stdio.h>
int main(){
int expr_val, c;
printf("Input a character and press enter: ");
expr_val = (getchar() != EOF);
printf("expr_val: %d\n", expr_val);
return 0;
}
Когда я печатаю в чем-либо, он возвращает значение 1. Когда я execut e a EOF (Ctrl + D), он возвращает значение 0.
Однако, когда я заменяю EOF в коде цифрой, скажем 3, программа не работает так, как я ожидаю. Если я набираю слово «5», он возвращает значение 1. Если я ввожу значение «3», оно также возвращает значение 1.
По моему мнению, ввод значения 3 должен возвращать значение, которое отличается от значения, я получаю, если я типа в значение 5.
(я только изменил EOF в 3)
#include <stdio.h>
int main(){
int expr_val, c;
printf("Input a character and press enter: ");
expr_val = (getchar() != 3);
printf("expr_val: %d\n", expr_val);
return 0;
}
Может кто-нибудь просветить меня о том, почему это так?
Спасибо всем, ваши ответы были очень ясными и полезными. Изменив EOF на «3» или 51, код работал правильно.
'3' и' '3'' отличаются.Дополнительную информацию см. В [ASCII-таблице] (http://www.asciitable.com/). –
'expr_val = (getchar()! = 'A');' и type'A'. – chux
Вопрос K & R немного глуп, по крайней мере, по отношению к стандарту C. Результат любой реляционной операции (например, выполняемой оператором '! =') Равен 0 или 1 по определению. –