как использовать EOF с fgets () в C - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь прочитать входы с терминала, я хочу прекратить чтение входов, если есть пустая строка и нажата кнопка ввода. Вот что у меня есть на данный момент.

#include <stdio.h>
#include <string.h>

   int main(int argc,char const *argv[]){
       char input[1024];

       while(fgets(input,1024,stdin)!=NULL){
          printf("%s", input);
       }
       if(EOF){
          printf("EOF");
       }

        return 0;
}

1 Ответ

0 голосов
/ 14 ноября 2018

Одна простая вещь, которую вы могли бы сделать, это проверить длину строки, считываемой с помощью fgets. Символ новой строки в конце входной строки считается допустимым символом fgets. Это означает, что длина тестируемой строки будет равна 1, если вы только что ввели новую строку. Итак, вы хотите переместить тест внутри цикла, а не пытаться проверить EOF вне цикла. Итак, ваш код должен выглядеть так:

#include <stdio.h>
#include <string.h>

int main(void) {
    char input[1024];

    while(fgets(input,1024,stdin)!=NULL) {
        printf("%s", input);
        if(strlen(input) == 1) {
            printf("EOF\n");
            break;
        }
    }
    return 0;
}

Также обратите внимание, что для того, чтобы тест EOF заработал, вы не нажмете Enter, вместо этого вы отправите ключ конца файла, например, CTRL-D на linux, в свою программу. В этом случае у вас не будет теста strlen внутри цикла.

...