程序可以编译,但是当提供输入时,什么都不做

The program compiles, but when provided with an input, does nothing

我是一名初级程序员(请原谅这个非常基本的问题),我正在通过 Kernighan 和 Ritchie 的书学习 C "The C programming language"。

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

#include <stdio.h>

int main() {
   long nc;

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

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

您应该使用 EOF 指示器结束流,在基于 Windows 的操作系统上为 CTRL+Z,在基于 Linux 的操作系统上为 CTRL+D。当getchar()读到EOF时,存在while循环,字符数输出到stdout.

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

如果您通过终端提供输入,则文件没有自然结束 所以你需要用一个特殊的键盘快捷键来发出信号,通常是 Windows 上的 Ctrl+Z 和 Unix 系统上的 Ctrl+D (Linux,MacOs,...) . (Windows 似乎还要求您在 Ctrl+Z 之前和之后都键入一个 Enter。Ctrl+Z 之前的 new-line 字符算作另一个字符,这实际上意味着 Windows ,与 Unixes 不同,似乎不允许您拥有不以 new-line 结尾的 text-files,至少对于没有 cygwin 的 mingw gcc。)

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