程序可以编译,但是当提供输入时,什么都不做
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
那样通过重定向提供输入文件,那么您不必担心这一点,因为文件系统文件有自然结束。
我是一名初级程序员(请原谅这个非常基本的问题),我正在通过 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
那样通过重定向提供输入文件,那么您不必担心这一点,因为文件系统文件有自然结束。