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 してやる必要があると思う。
例えば、
改行をしてフラッシュしてやる場合には、
(std::flush, std::endl だが、using std しているから省略)
出力が保留されたままになるというのは、
おそらく、バッファリングされているのだと思う。
そういう場合、flush してやる必要があると思う。
例えば、
cout << "何か文字を入力してね" << flush;とかしてやる。
改行をしてフラッシュしてやる場合には、
cout << "何か文字を入力してね" << endl;としてやる。
(std::flush, std::endl だが、using std しているから省略)
自信度 : 自信なし 回答レベル : アドバイス
だいぶ時間が経ってしまい、失礼いたしました。
おかげで問題が解決できました。
ありがとうございました。
Ads By Google
コメント(2)
#1. BLUEPIXY
2009-06-18 02:23:57
こちらで試してみた所では、そのような症状がでませんでした。
あと、止める場合のbreak を書いた方がいいですね。
2009-06-18 07:36:42
whileなのにbreakしてないのガクガクブルブルブル



