EOF在C中的用法


Usage of EOF in C

输出量

码:

1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>

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

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

我使用getchar()putchar().编写了一个简单程序

我已经添加了程序和输出的屏幕截图。 输出对我来说没有任何意义。

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


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


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

1
2
3
4
5
6
7
8
9
10
11
12
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
"
, c);
    if(c == EOF) {
        printf("c is equal to EOF
"
);
        break;
    }
}