Usage of EOF in C
输出量
码:
我尝试在C中测试EOF,但遇到了困难。 我想获取EOF的值,发现它是-1。
我使用getchar()和putchar().编写了一个简单程序
我已经添加了程序和输出的屏幕截图。 输出对我来说没有任何意义。
如您所见,我正在尝试获取字符并使用getchar()和putchar()显示它。 我正在尝试打印出while循环中使用的条件的值。 为了检查EOF,我特意输入-1作为输入。 putchar()打印出-1,然后最后的printf语句使我感到困惑。 我为getchar()输入-1,但显示了1,这意味着c不等于EOF。 但是我认为-1是EOF。
而且我不明白为什么还会显示11。 我正在使用codeblocks IDE。
请帮我。 提前致谢。
-
1)请以文本形式发布代码-而不是屏幕截图。 2)您在同一循环中两次调用了" getchar()"。 可能不是您的意图;)
-
输入-1作为输入将导致getchar返回-的ASCII码,然后返回1的ASCII码,您将字符和整数混合在一起。 可以通过按Ctrl + D(Linux)或Ctrl + Z(Windows)来生成EOF。
EOF不是字符,也不从流中读取。 它只是返回值,表明该流上没有更多输入。 您可以通过在* nix上键入CtrlD或在Windows上键入CtrlZ来发出EOF信号。
-
应当注意,control-D仅在一行的开始或按两次时才产生EOF。 它实际上不会生成EOF。 而是将键盘输入缓冲区的内容发送到程序。 输入处理软件将接收零个字符的读取请求解释为EOF。 因此,在没有待处理字符的情况下,control-D会导致EOF行为。 待定字符时,Control-D会立即发送它们,而不是按Enter键,而不会引起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;
}
} |
-
这很坏,scanf()可以返回EOF,但不能为其设置目标变量,这仅是组成部分,因此无法测试此代码。
-
谢谢。 修复了@jens的错误