Я только начал изучать программирование (C) в качестве хобби, самостоятельно. Я использую K&R.
main()
{
int c;
while ((c = getchar()) != EOF)
putchar(c);
}
Убедитесь, что getchar() != EOF ЕСТЬ 0 ИЛИ 1
Кажется, я понимаю, что происходит:
- c назначается следующий символ с клавиатуры
- c проверяется, является ли он EOF или нет
- c присваивается 1 или 0, в зависимости от того, EOF это или нет.
- символ отображается на выходе или если EOF завершает программу.
Однако мое решение неверно, поэтому я явно чего-то не понимаю:
main ()
{
int c;
while ((c = getchar()) != EOF)
printf("%d\n", c);
}
Это просто печатает значение символа. А также печатает «10», если я нажимаю клавишу возврата каретки.
Я думал, что он напечатает c. Однако он печатает значение символа, а не значение 1 или 0.
Я знаю, что c присваивается 1 или 0 после сравнения с EOF. Но я не уверен, какую логику я могу использовать, чтобы показать это. Кажется, мне нужно как-то «выйти» из отображения значения символа и вместо этого показать значение сравнения. Означает ли это, что мне нужно выйти из цикла while? Если да, то я не знаю как (и это только предположение).
Как я могу просто проверить, что c = 1 или 0?
Кроме того, откуда мне это знать? Полагаю, должно быть что-то фундаментальное, что я должен извлечь из этого.
main ()
{
int c;
while ((c = getchar()) != EOF != 0 != 1)
putchar(c);
}
Я также сделал это, и я думаю, что это работает. Поскольку он не выводит никаких символов, но я не уверен, что это решение, которое они ищут...
x != y
возвращает логическое значение. Вы можете убедиться, что это всегда1
или0
, прочитав стандарт C (и предполагая, что ваш компилятор действительно следует ему, я полагаю). значение сравнения с EOF). - person Wooble   schedule 19.07.2013