繁体   English   中英

“刷新输入缓冲区”是什么意思?

[英]What does it mean to "flush the input buffer"?

int prompt(const char *output_message, char *input, const int MAX_SIZE)
{
    printf("%s", output_message);

    int i = 0;
    char ch = '\0';

    while (1)
    {
        ch = (char)getchar();

        if (ch == '\n' || ch == EOF)
        {
            break;
        }
        else if (i < (MAX_SIZE - 1))
        {
            input[i++] = ch;
        }
    }

    input[i] = '\0';

    return i;
}

我写了这个 function 来获取用户输入的输入字符串。 所以 getchar() 正在遍历缓冲区,直到到达换行符或文件末尾。 我的问题是刷新输入缓冲区是否意味着将 FILE 指针(或那里的任何实现)从缓冲区中当前写入的部分移开,就像我使用 getchar() 所做的那样? “刷新输入缓冲区”实际上是什么意思?

“刷新输入缓冲区”是指尝试从输入 stream 中丢弃不需要的字符,这样它们就不会干扰以后的输入调用。

在您的代码中,看起来您不会遇到这个问题,因此刷新输入缓冲区对您来说应该不是问题。

当您使用scanf进行输入时,通常会出现不需要的输入问题。 scanf通常将用户的换行符留在输入缓冲区中,但稍后对getcharfgets (甚至scanf )的调用可能会因此而严重混淆。

刷新输入的问题在于并没有真正好的方法。 一种流行但推荐的技术是调用fflush(stdin) 看起来它应该只是门票,但问题是它没有明确定义并且不能保证工作(尽管一些程序员发现它在某些平台上对他们来说已经足够好了)。

有关此问题的更多信息,请参阅此问题此问题(也可能是问题)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM