C程序不会停止遇到EOF或-1

时间:2017-06-30 09:24:48

标签: c

我是C编程语言的新手。

如果输入为EOF或-1。

,程序将不会从for或while循环停止

该计划如下:

#include <stdio.h>
int main() {
    double nc;
    for (nc = 0; getchar() != EOF; ++nc) {
        printf("%.0f\n", nc);
    }
}

根据我的理解,如果我在终止中输入EOF或-1,则for循环将停止,因为-1或EOF使条件为假。

关于同一个例子还有一个问题:如果我不使用嵌套循环代码如下:

for (nc = 0; getchar() != EOF; ++nc)
    ;
printf("%.0f", nc);

没有任何错误或警告,但似乎函数printf无法按预期工作。它只输出我输入的内容。

3 个答案:

答案 0 :(得分:3)

您的程序将在文件末尾停止,这是EOF表示的内容。

要从终端输入文件结尾,请在unix或Mac / OS上键入 Ctrl-D ,然后在 Ctrl-Z Enter 上输入 Windows系统。

Ctrl-D 是通过按 Ctrl 然后 D 获得的,同时按住 Ctrl 键。

请注意,double变量不适用于简单的计数器,您应该使用int类型。

另请注意,程序一次不会收到一个字符的输入:从终端读取时可以以行为单位进行缓冲,在从文件读取时可以以块为单位进行缓冲。发布后,您的程序将从终端读取一行输入,并一次输出多行输出,每个输入一个字符,包括换行符。

答案 1 :(得分:1)

EOF不是您可以输入的内容,而是文件描述符所在的状态。

要在控制台上实现此状态,如果您正在运行类似unix的系统,则必须按 Ctrl + D

或者,如果您通过输入文件来运行您的应用程序,您会发现一旦读取到文件末尾,您的应用程序就会停止。

./my_app < some_file.txt

此外,我建议您使用整数类型来计算循环迭代,例如intsize_t。浮点类型不太适合这种情况。

答案 2 :(得分:0)

你误解了......

如果您在控制台中输入EOF或-1,您将获得这些字符串:"EOF", "-1"。如果你逐个字符地阅读它们,你将得到序列'E', 'O', 'F''-', '1'(数值,ASCII / UTF-8分别提供:69,79,70和45,49),但绝不是EOF(-1)的数值。

如何真正进入EOF:看到chqrlie的答案,谁比我快......