こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

\x1bを使ったswitch文が反応しない

int main(void){
int n;
while(1){
menu();
scanf("%d", &n);
switch(n){
case 1 : printf("\x1b[6;10H%s", "メニュー1を実行します"); break;
case 2 : printf("\x1b[6;10H%s", "メニュー2を実行します"); break;
case 3 : printf("\x1b[6;10H%s", "メニュー3を実行します"); break;
default : printf("\x1b[6;10H%s", "指定数字ではありません"); break;
}
}
return 0;
}
void menu(void){
printf("\x1b[2J");
printf("\x1b[3;10H%s", "メニュー1");
printf("\x1b[4;10H%s", "メニュー2");
printf("\x1b[5;10H%s", "メニュー3");
}

コンパイルは通るのですが、数字を入力しても反応が無くwhile(1)の繰り返しが続くだけになってしまいます。これはどこか問題あるでしょうか?

投稿日時 - 2009-03-01 16:27:48

QNo.4759475

すぐに回答ほしいです

質問者が選んだベストアンサー

反応しないのではなく menu関数で実行するprintf("\x1b[2J");により
メイン側での出力がクリアされてしまっているため実行結果が変化しないように思われているのではないでしょうか

printf("\x1b[2J");をmainのwhileループに入る前で実行して
menuからは削除してみましょう

投稿日時 - 2009-03-01 19:12:31

お礼

その通りでした。お二方とも有難うございました。助かりました。

投稿日時 - 2009-03-01 21:02:12

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

改行が無いせいで出力バッファがフラッシュされないのでは?
改行を入れるかstdoutをflushすれば良いと思います。
ちなみに、これ、NT系のWindowsでは(多分、期待通りには)動きませんよ。

投稿日時 - 2009-03-01 16:56:42

あなたにオススメの質問