#include <stdio.h>
main() {
long nc;
nc = 0;
while (getchar() != -1)
++nc;
printf("%ld\n", nc);
}
以上是我在K&R C书中的代码,例如1.5.2,但我更改了代码,因此getchar()检查-1。但是当输入负数(-1)时,代码不会停止在getchar()中读取。如何让代码停止,为什么不停止?
getchar()
函数从stdin
读取单个字节,并返回该字节的值。例如,在基于ASCII的系统上,字节值32表示空格,值33表示感叹号(!
),值34表示双引号("
),依此类推。特别是,字符-
和1
(组成字符串"-1"
)分别具有字节值45和48。
数字-1不对应于任何实际字符,而是对应于EOF
(end of file)的特殊值getchar()
(stdin
的首字母缩写),当EOF
没有更多字节要读时,my_program < some_file.txt
将返回。 (实际上,C标准不保证stdin
值等于-1,尽管在大多数系统上它都是。但是保证它小于零。)
所以你的循环,如写,将继续运行,直到没有更多的输入被读取。如果您从终端运行代码,这基本上意味着它将继续运行,直到您键入Ctrl + D(在Unixish系统上)或Ctrl + Z(在Windows上)。或者,您可以使用来自文件(例如使用you should use scanf()
)的输入来运行程序,这将导致循环运行,直到它逐字节读取整个文件。
如果您想要从qazxswpoi读取数字,并循环直到数字等于-1,则改为qazxswpoi。