2017-09-25 193 views
0

我對編程非常陌生,正在研究這段代碼,試圖理解它是如何工作的。我的理解是,while循環的每次運行的開始都是程序等待輸入,如果允許該輸入,則循環運行。那是對的嗎?如果是的話,如果程序打印出'$',程序如何顯示'!'鍵入,看在這種情況下如何在其他情況下的cout命令沒有被激活?需要關於cin.get和cin.putback的幫助

int main() { 
char ch; 
cout << "enter a phrase: "; 
while (cin.get(ch)) { 
    if (ch == '!') cin.putback('$'); 
    else cout << ch; 
    while (cin.peek() == `#') cin.ignore(1,'#'); 
    } 
return 0; 
} 

輸出:輸入一個詞組:Now!is#the!time#for!fun#! 現在$ isthe $可能性會$ $樂趣

+0

我不是C++專家,但我猜'cin.putback'替換'cin'流中最後一個輸入的字符。它確實與'cout'無關。 – Kilazur

回答

2

請參閱documentationputback方法:

istream的&補籃(字符C);

認沽字符回

試圖通過一個字符減少 流中的當前位置,使得從 流再次提供給由輸入操作提取提取的最後一個字符。

如果程序讀取'!'字符,它把迴流的'$'字符,這是在一個循環迭代讀取和打印。

+0

所以,如果我正確理解你,那麼cin.putback('$')會說,下一次我的程序中的一個字符應該被讀入,那個字符將是'$'? –

+0

@ElDuderino是的。但請注意(來自同一文檔):'putback'行爲取決於與流關聯的特定流緩衝區對象。不同類型的緩衝區可能會失敗,被忽略或覆蓋該位置的字符。 – Mikhail