C语言 while循环和getchar() -大输入



下面的代码不允许我输入超过4095个字符的任何东西,除非我输入n,我想知道为什么会发生。

#include <stdio.h>
int main(void)
{
int c;
unsigned long long a = 0;
while ((c = getchar()) != EOF)
++a;
printf("n%llun", a);
return 0;
}

例句:

input: '#' * 4094
output: 4094
input: '#' * 4095 
output: 4095
input: '#' * 4096
output: 4095

等等…

但是如果我输入n,我将能够循环更多的4095个字符,等等…

input: ('#' * 4096) + 'n' + '#'
output: 4097
input: ('#' * 99999) + 'n' + ('#' * 99999)
output: 8191

正如另一个Stack Exchange网站上的答案所解释的那样,您在这里看到的是操作系统键盘输入处理("终端驱动程序")的限制。

如果你把你的数据放到一个文件中,并使用输入重定向运行你的程序,像这样:

myprogram < input.txt

,那么你应该能够读取和计数真正任意长的行。

还有其他方法可以绕过终端驱动程序的线路限制,正如在另一个问题中所解释的。

最新更新