簡體   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