質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

curses

cursesは、 UNIX 系列で使用される端末制御ライブラリです。CUI アプリケーションを作成するために使用されます。表示端末は多くの制御コードをサポートしており、カーソル移動や画面のスクロール、領域消去といった一般的な操作の実行が可能です。

Q&A

解決済

1回答

1415閲覧

c++でcursesライブラリを用いたキー入力受付

00_x9925

総合スコア12

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

curses

cursesは、 UNIX 系列で使用される端末制御ライブラリです。CUI アプリケーションを作成するために使用されます。表示端末は多くの制御コードをサポートしており、カーソル移動や画面のスクロール、領域消去といった一般的な操作の実行が可能です。

0グッド

0クリップ

投稿2020/05/30 07:26

現在,C++でキー入力に応じた処理をさせようとしているのですが,キー入力を受け付けているのかいまいち怪しいです.
cursesライブラリに含まれるkeypadという関数w用いています.

ひとまずキー入力の成功を確認するために矢印キーに応じて1~12月までを描画するプログラムを書こうとしています.

どなたか知識がある方がいらっしゃいましたら,どうしたらキー入力ができるかお教えください.

C++

1 initscr(); 2 //矢印キーやファンクションキーなどの特殊キーを利用可能にする 3 keypad(stdscr, TRUE); 4 //入力したキー(→,←)を画面に表示しないようにする 5 noecho(); 6 //キーを押したらすぐにその文字がプログラムから読み取れるようにする 7 nocbreak(); 8 9 int cnt_month = 1; 10 11 while (true) 12 { 13 14 if (KEY_RIGHT == 1) 15 { 16 cnt_month++; 17 if (cnt_month > 12) 18 { 19 cnt_month = 1; //折り返す 20 } 21 } 22 if (KEY_LEFT == 1) 23 { 24 cnt_month--; 25 if (cnt_month < 1) 26 { 27 cnt_month = 12; //折り返す 28 } 29 } 30 31 if (KEY_ENTER == 1) 32 { 33 break; 34 } 35 36 switch (cnt_month) 37 { 38 case 1: 39 mvaddstr(1, 25, "1月"); //任意の座標に文字列を描画 40 break; 41 case 2: 42 mvaddstr(1, 25, "2月"); 43 break; 44 case 3: 45 mvaddstr(1, 25, "3月"); 46 break; 47 case 4: 48 mvaddstr(1, 25, "4月"); 49 break; 50 case 5: 51 mvaddstr(1, 25, "5月"); 52 break; 53 case 6: 54 mvaddstr(1, 25, "6月"); 55 break; 56 case 7: 57 mvaddstr(1, 25, "7月"); 58 break; 59 case 8: 60 mvaddstr(1, 25, "8月"); 61 break; 62 case 9: 63 mvaddstr(1, 25, "9月"); 64 break; 65 case 10: 66 mvaddstr(1, 25, "10月"); 67 break; 68 case 11: 69 mvaddstr(1, 25, "11月"); 70 break; 71 case 12: 72 mvaddstr(1, 25, "12月"); 73 break; 74 } 75 getch(); 76 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自分なりに変更してみました.
キー入力は受け付けられました.
しかし,「01月」や「」02月」は描画されましたが,肝心のグラフだけなぜか描画されません.
何故でしょうか?

C++

1 initscr(); 2 //カーソルを非表示 3 curs_set(0); 4 //キーを押したらすぐにその文字がプログラムから読み取れるようにする 5 cbreak(); 6 //入力したキーを画面に表示しないようにする 7 noecho(); 8 //矢印キーやファンクションキーなどの特殊キーを利用可能にする 9 keypad(stdscr, 1); 10 11 12 int cnt_month = 1; 13 14 //矢印キーに応じて,表示する月を変える 15 while (1) 16 { 17 draw_Graphtemplate(); 18 19 int key = getch(); 20 21 if (key == KEY_RIGHT) 22 { 23 erase(); 24 cnt_month++; 25 if (cnt_month > 12) 26 { 27 cnt_month = 1; //12の次は1 28 } 29 } 30 if (key == KEY_LEFT) 31 { 32 erase(); 33 cnt_month--; 34 if (cnt_month < 1) 35 { 36 cnt_month = 12; //1の次は12 37 } 38 } 39 40 if (key == KEY_DOWN) 41 { 42 break; 43 } 44 45 if (cnt_month == 1) 46 { 47 mvaddstr(1, 24, "01月"); 48 Array2CSV(s_outputdata, d_mdata, 1); 49 draw_graph(s_outputdata); //月の平均気温のグラフを描画 50 } 51 else if (cnt_month == 2) 52 { 53 54 mvaddstr(1, 24, "02月"); 55 Array2CSV(s_outputdata, d_mdata, 2); 56 draw_graph(s_outputdata); 57 } 58 else if (cnt_month == 3) 59 { 60 mvaddstr(1, 24, "03月"); 61 Array2CSV(s_outputdata, d_mdata, 3); 62 draw_graph(s_outputdata); 63 } 64 else if (cnt_month == 4) 65 { 66 mvaddstr(1, 24, "04月"); 67 Array2CSV(s_outputdata, d_mdata, 4); 68 draw_graph(s_outputdata); 69 } 70 else if (cnt_month == 5) 71 { 72 mvaddstr(1, 24, "05月"); 73 Array2CSV(s_outputdata, d_mdata, 5); 74 draw_graph(s_outputdata); 75 } 76 else if (cnt_month == 6) 77 { 78 mvaddstr(1, 24, "06月"); 79 Array2CSV(s_outputdata, d_mdata, 6); 80 draw_graph(s_outputdata); 81 } 82 else if (cnt_month == 7) 83 { 84 mvaddstr(1, 24, "07月"); 85 Array2CSV(s_outputdata, d_mdata, 7); 86 draw_graph(s_outputdata); 87 } 88 else if (cnt_month == 8) 89 { 90 mvaddstr(1, 24, "08月"); 91 Array2CSV(s_outputdata, d_mdata, 8); 92 draw_graph(s_outputdata); 93 } 94 else if (cnt_month == 9) 95 { 96 mvaddstr(1, 24, "09月"); 97 Array2CSV(s_outputdata, d_mdata, 9); 98 draw_graph(s_outputdata); 99 } 100 else if (cnt_month == 10) 101 { 102 mvaddstr(1, 24, "10月"); 103 Array2CSV(s_outputdata, d_mdata, 10); 104 draw_graph(s_outputdata); 105 } 106 else if (cnt_month == 11) 107 { 108 mvaddstr(1, 24, "11月"); 109 Array2CSV(s_outputdata, d_mdata, 11); 110 draw_graph(s_outputdata); 111 } 112 else if (cnt_month == 12) 113 { 114 mvaddstr(1, 24, "12月"); 115 Array2CSV(s_outputdata, d_mdata, 12); 116 draw_graph(s_outputdata); 117 } 118 }

投稿2020/05/30 08:21

00_x9925

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問