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

标签 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 未按预期工作。它只是输出我输入的内容。

最佳答案

您的程序将在文件末尾停止,这就是 EOF 的含义。

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

Ctrl-D 是通过在按住 Ctrl 键的同时按 CtrlD 来获得的。

请注意,double 变量不适合简单计数器,您应该选择 int 类型。

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

关于C程序遇到EOF或-1不会停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44843028/

相关文章:

32 位处理器真的可以寻址 2^32 个内存位置吗?

c - 'stripspaces' 从指针生成整数而不进行强制转换

c++ - 缓存在处理设备时会有限制吗?

c - 叉无限循环

C文件指针读写问题

c - 打印浮点值时的奇怪行为

c - C中公式的随机输出

c++ - 如何将 std::function 对象传递给采用函数指针的函数?

c - 这两个符号 switch->port->data 和 &(switch->port->data) 在 C 中是否相同?

c - 在结构中分配动态数组