• ベストアンサー

なぜに0が表示されるの?

キー入力を調べるために以下の プログラムを作成したのですが・・・ #include <stdio.h> #include <stdlib.h> #include <conio.h> int main(void) { int inkey = 0; while (1) { inkey = getch(); if (inkey == 0x1b) { break; } printf("%d %x\n", inkey); } } ↑↓→←とかのキーは、 変数inkeyの値を表示する前に、 0 0と表示されます。 なぜなんでしょうか? ほかのキーでは、普通に表示されます。 教えてください。

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

  • ベストアンサー
  • mrt136
  • ベストアンサー率35% (33/92)
回答No.2

まず、cherry_moonさんが書かれている様に、printf() 関数の使い方が おかしいですね。この場合、 printf("%d %x\n", inkey, inkey); と 書くのが正解かも知れませんね。 ただ、ご質問の内容は、何故、矢印キーの場合は、値を表示する前に 0 0 と表示されるのかと言う事なので、意図している回答とは違いますね。 で、何故、0 0 と表示されるかですが、それは、 getch() の仕様です。 リファレンスマニュアル等をもう一度読まれてみてはどうでしょうか? ファンクションキー、矢印キーなどは、getch() は2回呼び出されると 書かれているかと思います。また、その1回目は、0、または 0xE0 が 返されると書かれています。

mayoler
質問者

お礼

リファレンスマニュアルとか無いんです。 全部無料の使ってますから。 ありがとうございました。 でも、プログラム自体には、 printf()関数の使い方以外問題は 無かったようですね。 これぐらいのことなら、getch()関数を 検索すればよかったのかなぁ・・・なんて。 (聞いておいてすいませんです。。。) また、お世話になるかもしれませんが よろしくお願いします。

その他の回答 (1)

回答No.1

> printf("%d %x\n", inkey); ここがおかしいです。 printf("%d %x\n", a, b); と書くと、a を 10 進数で、 b を 16 進数で出力する。 という意味です。 mayoler さんの場合、b になるものがありません。 %d か %x のどちらかを消してみて下さい。

mayoler
質問者

お礼

一回やったんですが、 inkey変数を引っ張るのは一回でも、 できるんで、そのままにしちゃったんですけど。。。