我如何检查在C输入缓冲区/流中没有任何东西



我已经为此寻找了许多解决方案,但没有一个满足我的需求。

I need to:

  1. 使用scanf()读取以空格分隔的两个整数。
  2. 如果只输入一个整数,我需要检查并清除缓冲区。
  3. 如果有超过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);
}

相关内容

  • 没有找到相关文章

最新更新