2016-03-25 26 views
0

ケース1:この通常の場合、コンソールはと表示され、と表示されます。Visual Studioのコンソールが表示されなくなるのはなぜですか?

int main() { 
    string s4(4,'a'); 
    string s3(3, 'b'); 

    cout << s3+s4<<endl; 

    cin.get(); 
    return 0; 
} 

ケース2:私はcin >>を追加し、コンソールが、なぜ消えもらいますか?

int main() { 
    string s4(4,'a'); 
    string s3(3, 'b'); 
    string word; 
    cin >> word; 
    cout << s3+s4+word <<endl; 

    cin.get(); 
    return 0; 
} 

ケース3:私はは、なぜ、再び表示されます1 cin.get()以上とコンソールを追加しますか?

答えて

1

"問題"は、入力バッファに文字が残っていることです(例では改行文字)。

cin.get()ケース3\nを読み取り、2番目の文字は新しい文字を待ちます。

std::cinは、改行文字をストリームから削除しないため、入力の問題を引き起こすことで有名です。

また、スペースを壊してしまいます.1つ以上の単語を入力すると、最初の単語だけが読み込まれます(入力ストリームにはスペースとそれに続く単語が残ります) 。

テキスト全体の行を抽出するには、グローバル関数getlineの文字列のオーバーロードが最適です。


あなたは「トリッキー」を追加してはいけませんが、オープンコンソールを維持するためのコマンド(cin.get()system("pause") ...):以下、あなたが「生産」のコードからそれらを削除するために覚えておく必要があります。あなたがボタンを押すまで

あなたはオープンコンソールアプリケーションのウィンドウを維持するデバッガモード(CTRL + F5)とVisual Studioがなければ、あなたのプログラムを実行することができます(ただProject -> Properties -> Linker -> System -> Sub System -> Console (/SUBSYSTEM:CONSOLE)で設定を確認してください)。

もちろん、デバッグしている場合(F5)、return 0;のブレークポイントが最適です。

関連する問題