c - 程序可以编译,但在提供输入时不执行任何操作

标签 c getchar kernighan-and-ritchie

我是一名初学者程序员(请原谅这个非常基本的问题),我正在通过 Kernighan 和 Ritchie 的书“C 编程语言”学习 C。

我从书中复制了这个程序,它编译得很好,但是当给出输入时,程序什么也不做。

#include <stdio.h>

int main() {
   long nc;

   nc = 0;
   while (getchar() != EOF)
      ++nc;
   printf("%1d\n", nc);
 }

输出应该是输入中的字符数,但什么也没有发生

最佳答案

遇到EOF时会打印输入的字符数(=文件结尾)条件。

如果您通过终端提供输入,则没有自然的文件结尾 因此您需要使用特殊的键盘快捷键来指示它,通常是 Ctrl+Z在 Windows 上和 Ctrl+D在 Unix 系统(Linux、MacOs...)上。 (Windows 似乎还要求您在 Ctrl+Z 之前和之后都键入 Enter。Ctrl+Z 之前的换行符算作另一个字符,这实际上意味着 Windows 与 Unix 不同,似乎不允许你的文本文件不以换行符结尾,至少对于没有 cygwin 的 mingw gcc 来说是这样。)

如果您通过重定向提供输入文件,如 ./a.out < some_file 所示,那么您不必担心这一点,因为文件系统文件有自然的结束。

关于c - 程序可以编译,但在提供输入时不执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57132256/

相关文章:

c - for循环迭代问题

c - 逐行读取字符串数组中的内容

c - 为什么 getchar() 不停止读取 C 中的字符串?

c - GCC 编译器错误, 'p_data' 可能未初始化使用

c - getchar() != EOF

C printf 在使用 getchar() 溢出缓​​冲区后打印两次

c - K&R 任务练习 5.17

c - 这个函数究竟是如何将 char 转换为 int 的示例?

python - Python C API 中的多重继承

CUnit:因动态生成的字符串而失败