2017-09-25 7 views
0

私はプログラミングにとても慣れています。このコードを見て、どのように動作するのか理解しようとしていました。私の理解は、whileループの各実行の開始は、プログラムが入力を待つことであり、その入力が許可されていれば、ループが実行されます。あれは正しいですか?そうであれば、 '!'なら '$'をプリントアウトする方法は?その場合、else caseの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!for!fun#! 今$ $ timeforの$の楽しさをisthe $

+0

私はC++のエキスパートではありませんが、 'cin.putback'は' cin'ストリームの最後の型付き文字を置き換えます。それは確かに 'cout'とは関係がありません。 – Kilazur

答えて

2

putback方法のためdocumentationを参照してください。

はistream &プットバック(char型c)は、

プット文字入力操作によって抽出することが再び使用可能 ストリームから抽出された最後の文字を作り、一つの文字により ストリーム内の現在位置を低減するバック

試み。プログラムは'!'文字を読み取る場合

は、それが次のループの繰り返しで読み込んで印刷されたストリーム'$'文字に戻ります。

+0

私はあなたを正しく理解していれば、次にcin.putback( '$')は私のプログラム内の文字が次に読み込まれるはずの文字で、その文字は '$'でしょうか? –

+0

@ ElDuderinoはい。しかし、(同じドキュメントから) 'putback'の振る舞いは、ストリームに関連する特定のストリームバッファオブジェクトに依存することに注意してください。異なるタイプのバッファは、その位置の文字を失敗、無視、または上書きすることができます。 – Mikhail

関連する問題