窗口下的EOF值

时间:2017-10-02 22:16:25

标签: c windows eof

我写了这段代码:

#include <stdio.h>

int main() {
    int c;

    while ((c = getchar()) != EOF)
        putchar(c);

    return 0;
}

在Windows下,我发现我必须输入ctrl + z才能停止程序,我还打印了EOF的值并且它是-1。 但是,当我输入-1而不是ctrl + z时,程序继续执行,我想了解原因。谢谢!

5 个答案:

答案 0 :(得分:3)

输入"-1"作为文本不会返回整数值-1,而是返回两个字符,即'-'(对应于ASCII值45)和{{1 (对应于ASCII值'1')。两者都不等于49(十进制为EOF)。

根据定义,您不能输入被-1作为负值消费的内容,因为负值被定义为代表&#34;文件结束&#34;。

如果您想要读取整数值(例如getchar()),请使用-1

scanf

答案 1 :(得分:1)

  

当我输入-1而不是ctrl + z时,程序继续执行,我想了解原因

因为&#34; -1&#34;被解释为&#39; - &#39;和&#39; 1&#39;,而不是紧凑的输入。这就是为什么你无法用你的代码捕获它。

答案 2 :(得分:1)

getchar()函数返回 刚刚输入的字符的数值(被视为unsigned char,因此它永远不会为负),或< / em>特殊值EOF,表示没有更多输入。

Windows使用Control-Z触发和结束文件条件,这会导致getchar()返回值EOF。但EOF不是字符值;它被特别选择为一个不能成为字符值的值。

文件结束是条件,而不是值。 EOF是数值,但不是字符值;它是getchar()返回的值,表示输入处于文件结束条件(或错误条件)。

(如果要读取整数值,正数或负数,则需要一次读取一个字符,然后计算字符序列所代表的整数值。整数值-1可以输入为字符'-'后跟字符'1'。C具有各种功能,例如atoi*scanf系列,可以进行转换。)

答案 3 :(得分:0)

EOF不是一个“价值”&#39;。它是由(fac 5) => 120 库定义的哨兵。

Ctrl / z是一个击键,它由终端驱动程序解释,并使其通知从应用程序读取的流的结束,这导致C stdio返回零,导致read()返回EOF。

Unix,Linux等上的相应按键是Ctrl / d。

答案 4 :(得分:-1)

您需要稍微更改一下逻辑:

array ( 0 => 21, 4 => 76, 7 => 85, 8 => 55, )

}