我已经为此寻找了许多解决方案,但没有一个满足我的需求。
I need to:
- 使用
scanf()
读取以空格分隔的两个整数。 - 如果只输入一个整数,我需要检查并清除缓冲区。
- 如果有超过2个整数输入,我需要检查并清除缓冲区。
到目前为止,我一直使用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")] = ' '; // lop off potential n
int n1, n2;
int cnt = sscanf(buf, "%d%n%d%n", &d1, &n1, &d2, &n2);
if (buf[0] == ' ') Handle_NothingWasEntered();
else if (cnt == 1 && buf[n1] == ' ') Handle_OneWasEntered(d1);
else if (cnt == 2 && buf[n1] == ' ' && buf[n2] == ' ') Handle_TwoWereEntered(d1, d2);
else Handle_BadInput(buf);
}