Использование EOF в C - PullRequest
       2

Использование EOF в C

0 голосов
/ 04 марта 2019

Вывод

Код:

#include<stdio.h>

main()
{
  int c;
  printf("Enter any charachter!: ");
  while((c = getchar()) != EOF) {
    putchar(c);
    printf("%d\n", (c = getchar()) != EOF);
  }
}

Я пытался протестировать EOF на C, и у меня возникают трудности с этим.Я хотел получить значение EOF и выяснил, что это -1.

Я написал простую программу, используя getchar() и putchar().

Я добавил скриншот программы и вывод.Вывод не имеет никакого смысла для меня.

Как видите, я пытаюсь получить символ и отобразить его, используя getchar() и putchar().И я пытаюсь распечатать значение условия, используемого в цикле while.Чтобы проверить EOF, я намеренно ввожу -1 в качестве ввода.putchar() печатает -1, а затем последнее утверждение printf смущает меня.Я ввожу -1 для getchar(), но 1 отображаемое значение c не равно EOF.Но я думал, что -1 - это EOF.
И я не понимаю, почему также отображается 11.Я использую codeblocks IDE.
Пожалуйста, помогите мне.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

EOF не является символом и не читается из потока.Это просто возвращаемое значение, указывающее, что в этом потоке больше нет входных данных.Вы можете подать EOF, набрав Ctrl D в * nix или Ctrl Z в Windows.

0 голосов
/ 04 марта 2019

getchar принимает ввод по одному символу (байту) за раз.поэтому, когда вы вводите «-1», он обрабатывается как ввод массива символов, и первый getchar принимает только «-», а второй - «1».Таким образом, вы не получаете желаемый результат.Также путчар предназначен для печати по одному символу за раз.Так что это может не работать должным образом тоже.Вы можете изменить свой код следующим образом, чтобы он работал.

int c;

while(scanf("%d", &c)!=EOF) { //to ensure there is some input value as scanf will return EOF when input stream finishes.

    printf("%d\n", c);
    if(c == EOF) {
        printf("c is equal to EOF\n");
        break;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...