EOF在C语言中的用法

时间:2019-03-04 07:05:09

标签: c

Output

代码:

#include<stdio.h>

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

我尝试在C中测试EOF,但遇到了困难。我想获取EOF的值,发现它是-1

我使用getchar()putchar().

编写了一个简单程序

我已经添加了程序和输出的屏幕截图。输出对我来说毫无意义。

如您所见,我正在尝试获取一个字符并使用getchar()putchar()显示它。我正在尝试打印出while循环中使用的条件的值。为了检查EOF,我特意输入-1作为输入。 putchar()打印出-1,然后最后的printf语句使我感到困惑。我为-1输入getchar(),但显示1表示c不等于EOF。但我认为-1是EOF。
而且我不明白为什么还会显示11。我正在使用codeblocks IDE。
请帮我。预先感谢。

2 个答案:

答案 0 :(得分:2)

EOF不是字符,也不是从流中读取的。它只是返回值,表明该流上没有更多输入。您可以通过在* nix上键入 Ctrl D 或在Windows上键入 Ctrl Z 来发出EOF信号。

答案 1 :(得分:-1)

getchar一次输入一个字符(字节)。因此,当您输入“ -1”时,它将被视为字符数组输入,并且第一个getchar仅接受输入“-”,第二个getchar接受输入“ 1”。因此,您没有得到所需的输出。另外,putchar旨在一次打印一个字符。因此它可能也无法正常工作。您可以按照以下方式更改代码以使其正常工作。

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;
    }
}