知識、知恵のカタマリ

[PR]コレがGoogleの検索ストーリー

解決済

clip!clip!
Ads By Google

C++について質問です。
今月からC++の勉強を始めた初心者です。
ソフトはVC++、OSはwindowsXPを使用しています。

#include <iostream>
#include <string>

using namespace std;

int main(void)

{
while(true){

cout << "何か文字を入力してね";

string line;
getline(cin, line);

if(line.size() >= 2){
cout << "2バイト以上入力しないでね";
}

else if(line[0]=='y'){
cout << "続けるよ";
}

else if(line[0]=='n'){
cout << "やめるよ";
}

else{
cout << "yかnを入力してね";
}

}

return 0;
}


以上のソースを書いた時、始めに何か文字を入力してエンターを押しても何も表示されず、
続いてもう1度入力してエンターを押すと、そこで初めて表示がされます。
1度の入力でその内容に見合った表示を出力するには、
どのように直せば良いしょうか。
ご教授お願い致します。

2009-06-18 01:25の質問
この質問と回答を読んで役に立った場合は「役に立つ質問」に投票してください。投票が多い質問は、役に立つ質問一覧に掲載され、より多くの人に見てもらうことができます。

回答(1)

1.

2009-06-18 02:53:34ベスト
ウチでは、症状が再現しないので、自信なしですが、
出力が保留されたままになるというのは、
おそらく、バッファリングされているのだと思う。
そういう場合、flush してやる必要があると思う。

例えば、
 cout << "何か文字を入力してね" << flush;
とかしてやる。
改行をしてフラッシュしてやる場合には、
 cout << "何か文字を入力してね" << endl;
としてやる。
(std::flush, std::endl だが、using std しているから省略)
自信度 : 自信なし 回答レベル : アドバイス

だいぶ時間が経ってしまい、失礼いたしました。
おかげで問題が解決できました。
ありがとうございました。

Ads By Google

コメント(2)

#1.  BLUEPIXY
2009-06-18 02:23:57

こちらで試してみた所では、そのような症状がでませんでした。

あと、止める場合のbreak を書いた方がいいですね。

whileなのにbreakしてないのガクガクブルブルブル

トラックバック(2)

トラックバックURL: