В чем разница между EOF и обычным целым числом? - PullRequest
0 голосов
/ 26 августа 2011

ниже код

Код:

#include <stdio.h>



int main(void)
{
    int ch;

    while((ch = getchar()) != 'h')
        putchar(ch);


    return 0;
}

Вопрос:

1.) Поэтому, как обычно, я просто запускаю этот код из-за любопытства, когда программа запрашивает ввод, я вставляю ^z(CTRL + Z), то есть EOF (Windows 7 Command Prompt), но все, что я получаю, это бесконечный цикл печати символов.

2.) Из кода моя логика заключается в том, что, поскольку я ввожу в программу ^z, он просто оценит логику (ch = getchar()) != 'h', и будет возвращено значение true или 1 и символ * 1020. * будет распечатан. Но вместо другого результата будет доходность.

Ответы [ 3 ]

2 голосов
/ 26 августа 2011

Когда вы нажимаете ^Z, программа замечает, что входной поток был закрыт, но вы продолжаете использовать getchar(), поэтому вы получаете EOF.Это зацикливается бесконечно, поскольку вы больше не можете вводить 'h'.Обратите внимание, что только 'h' (не 'A', не ^M, а также не ^Z) может остановить программу, поскольку Вы зацикливаетесь, если не получаете 'h' .

Другими словами, если вы хотите остановить, если введено что-то еще, кроме 'h', тогда выполните

do
{
    ch = getchar();
    putchar(ch);
} while (ch == 'h');
1 голос
/ 26 августа 2011

EOF обычно определяется как -1 (но это зависит от реализации). Когда вы вызываете putchar (-1), он преобразуется в unsigned char и становится значением 255, которое затем выводится (ÿ, если я не ошибаюсь).

0 голосов
/ 26 августа 2011

EOF - это целое число с отрицательным значением, определяемым реализацией. Ваш код зацикливается бесконечно, потому что только ввод 'h' завершит его. Но как только он читает EOF (!= 'h'), он входит в бесконечный цикл, потому что стандартный ввод закрыт, и нет ничего, что могло бы заставить его вернуть что-либо еще.

...