簡體   English   中英

C ++中while循環中奇怪的cout行為

[英]Strange cout behavior in a while loop in C++

我正在嘗試打印輸入內容,然后打印tk向量中的所有字符串,如以下程序所示:

int main() {
    while (true) {
        string input;
        cout << "prompt: ";
        cin >> input;
        vector<string> tk = {"this", "is", "an", "example"}; 

        cout << input << endl;
        for (int i = 0; i < tk.size(); i++) {
            cout << tk[i] << endl;
        }

    }   
    return 0; 
}

當我輸入“ Hello world”時,我期望輸出是:

Hello world
this
is
an 
example
prompt: 

但是輸出是:

Hello
this
is
an
example
prompt: world
this
is 
an
example
prompt:

有人知道這里出了什么問題嗎? 我想原因與緩沖區的工作方式有關,但是我真的不知道細節。

>>串流到一個字符串中會讀取一個單詞,直到一個空格字符。 因此,您將獲得兩個單獨的輸入: "Hello""world"

要閱讀整行:

getline(cin, input);

緩沖區工作正常。 opreator>>背后的邏輯是……嗯……有點復雜。 實際上,您正在使用一個獨立的operator>>作為輸入流和一個字符串-this no(2)

關鍵部分是:

[...]然后讀取字符[...],直到滿足以下條件之一:

[...]

  • std::isspace(c,is.getloc())對於in中的下一個字符c為true(此空白字符保留在輸入流中)。

這意味着它會“吃掉”輸入,直到滿足空白(根據當前語言環境)。 當然,正如邁克所說,整行都有getline

還值得記住這個nitpick: 為什么cin命令在緩沖區中留下一個'\\ n'?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM