如何在C中检查输入缓冲区/流中的内容?
我已经在这方面寻找了很多解决方案,但没有一个能满足我的需要 我需要:如何在C中检查输入缓冲区/流中的内容?,c,input,stream,buffer,flush,C,Input,Stream,Buffer,Flush,我已经在这方面寻找了很多解决方案,但没有一个能满足我的需要 我需要: 使用scanf()读取两个由空格分隔的整数 如果只输入了一个整数,我需要检查并清除缓冲区 如果输入的整数超过2个,我需要检查并清除缓冲区 到目前为止,我一直在使用getchar()来实现检查和清除。问题是,如果缓冲区中没有任何内容,getchar()将等待一个字符 如何检查输入缓冲区/流中是否没有任何内容?通过这种方式,如果没有内容,我不必使用getchar()清除缓冲区。使用标准C无法执行此操作-检查stdin缓冲区中的字符
scanf()
读取两个由空格分隔的整数getchar()
来实现检查和清除。问题是,如果缓冲区中没有任何内容,getchar()
将等待一个字符
如何检查输入缓冲区/流中是否没有任何内容?通过这种方式,如果没有内容,我不必使用
getchar()
清除缓冲区。使用标准C无法执行此操作-检查stdin
缓冲区中的字符,如果没有内容,则立即返回
然而,我认为在这里无论如何都不需要这样做。只需使用fgets()
读取一行,等待用户键入0个或更多字符,然后输入将在stdin中放置'\n'
<代码>fgets()
将返回
使用“%n”
记录扫描在该点的位置,确保正确的空格分隔符并检测额外的垃圾
char buf[100];
if (fgets(buf, sizeof buf, stdin) == NULL) Handle_EOF();
buf[strcspn(buf, "\n")] = '\0'; // lop off potential \n
int n1, n2;
int cnt = sscanf(buf, "%d%n%d%n", &d1, &n1, &d2, &n2);
if (buf[0] == '\0') Handle_NothingWasEntered();
else if (cnt == 1 && buf[n1] == '\0') Handle_OneWasEntered(d1);
else if (cnt == 2 && buf[n1] == ' ' && buf[n2] == '\0') Handle_TwoWereEntered(d1, d2);
else Handle_BadInput(buf);
}
您可以检查行尾字符。如果最后一次调用
getchar()
返回'\n'
,您已经到了行的末尾。@CoolGuy我已经想到了。这不符合我的目的。我需要一种不同的检查方法,应该。显示您的代码以及一些示例输入和输出。我认为没有其他方法可以做到这一点。