如何在C中检查输入缓冲区/流中的内容?

如何在C中检查输入缓冲区/流中的内容?,c,input,stream,buffer,flush,C,Input,Stream,Buffer,Flush,我已经在这方面寻找了很多解决方案,但没有一个能满足我的需要 我需要: 使用scanf()读取两个由空格分隔的整数 如果只输入了一个整数,我需要检查并清除缓冲区 如果输入的整数超过2个,我需要检查并清除缓冲区 到目前为止,我一直在使用getchar()来实现检查和清除。问题是,如果缓冲区中没有任何内容,getchar()将等待一个字符 如何检查输入缓冲区/流中是否没有任何内容?通过这种方式,如果没有内容,我不必使用getchar()清除缓冲区。使用标准C无法执行此操作-检查stdin缓冲区中的字符

我已经在这方面寻找了很多解决方案,但没有一个能满足我的需要

我需要:

  • 使用
    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")] = '\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我已经想到了。这不符合我的目的。我需要一种不同的检查方法,应该。显示您的代码以及一些示例输入和输出。我认为没有其他方法可以做到这一点。