我为此搜索了很多解决方案,但没有一个能满足我的需求。
我需要:
- 使用
scanf()
读取两个由空格分隔的整数。 - 如果只输入了一个整数,我需要检查并清除缓冲区。
- 如果输入的整数超过 2 个,我需要检查并清除缓冲区。
到目前为止,我一直使用getchar()
来实现检查和清除。问题是如果缓冲区中没有任何内容,getchar()
会等待一个字符。
我如何检查输入缓冲区/流中是否没有任何内容? 这样,如果没有任何内容,我就不必使用 getchar() 清除缓冲区
。
最佳答案
您不能使用标准 C 来执行此操作 - 检查 stdin
缓冲区中的字符,如果不存在则立即返回。
但我认为无论如何这里都不需要。只需使用 fgets()
读取一行,等待用户键入 0 个或更多字符,然后 Enter 将放置一个 '\n'
在 stdin
中。 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);
}
关于c - 如何在 C 中检查输入缓冲区/流中的任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32923054/