• ベストアンサー

\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)の繰り返しが続くだけになってしまいます。これはどこか問題あるでしょうか?

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

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

wachi888
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • buriburi3
  • ベストアンサー率44% (353/792)
回答No.1

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

すると、全ての回答が全文表示されます。

関連するQ&A