Получение ввода в условии if - PullRequest
3 голосов
/ 15 июля 2011
#include <stdio.h>

// copy input to output
// my version

int main()
{
    int c;

    printf("\n\nUse CONTROL + D to terminate this program\n\n");

    while ((c = getchar()) != EOF) {
        putchar(c);
    }

    if ((c = getchar()) == EOF) {
        printf("\n\nProgram TERMINATED\n\n");
    }

    return 0;
}

Когда я ввожу control + D , выполняется тело оператора if.Это то, что я хотел, но, поскольку я проанализировал код более тщательно, не должен ли он снова запросить мой ввод, поскольку условие if (c = getchar()) == EOF?

Ответы [ 3 ]

2 голосов
/ 15 июля 2011

Когда вы нажимаете ^D, вход в программу закрывается, поэтому getchar() впоследствии всегда будет возвращать EOF.

1 голос
/ 15 июля 2011

Control-D - символ конца файла в каноническом режиме.При вводе в начале строки это приводит к тому, что процесс видит условие EOF, то есть чтение возвращает 0. Однако, если Control-D введен где-то, кроме начала строки, онпросто заставляет чтение немедленно вернуться с тем, что было введено до сих пор.

Если вы дважды нажмете Control-D, вы увидите, о чем вы спрашиваете.

РЕДАКТИРОВАТЬ

Здесь является довольно хорошим объяснением.

0 голосов
/ 15 июля 2011

^ D немедленно завершает программу.Таким образом, ваш getchar никогда не вернется, когда нажмете ^ D.

Именно поэтому REPL, как и python, завершается с использованием 'exit ()'.

Если хотите, попробуйте использовать 'q'за выход:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...