Getchar没有停止比较

问题描述 投票:1回答:1
#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()中读取。如何让代码停止,为什么不停止?

c
1个回答
3
投票

getchar()函数从stdin读取单个字节,并返回该字节的值。例如,在基于ASCII的系统上,字节值32表示空格,值33表示感叹号(!),值34表示双引号("),依此类推。特别是,字符-1(组成字符串"-1")分别具有字节值45和48。

数字-1不对应于任何实际字符,而是对应于EOFend 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。

© www.soinside.com 2019 - 2024. All rights reserved.