激凹みから立ち直る方法

キー入力を調べるために以下の
プログラムを作成したのですが・・・

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main(void)
{
intinkey = 0;

while (1) {
inkey = getch();
if (inkey == 0x1b) {
break;
}
printf("%d %x\n", inkey);
}

}

↑↓→←とかのキーは、
変数inkeyの値を表示する前に、
0 0と表示されます。
なぜなんでしょうか?
ほかのキーでは、普通に表示されます。
教えてください。

A 回答 (2件)

> printf("%d %x\n", inkey);



ここがおかしいです。
printf("%d %x\n", a, b);
と書くと、a を 10 進数で、 b を 16 進数で出力する。
という意味です。

mayoler さんの場合、b になるものがありません。
%d か %x のどちらかを消してみて下さい。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/04/03 11:42

まず、cherry_moonさんが書かれている様に、printf() 関数の使い方が


おかしいですね。この場合、 printf("%d %x\n", inkey, inkey); と
書くのが正解かも知れませんね。

ただ、ご質問の内容は、何故、矢印キーの場合は、値を表示する前に 0 0
と表示されるのかと言う事なので、意図している回答とは違いますね。

で、何故、0 0 と表示されるかですが、それは、 getch() の仕様です。
リファレンスマニュアル等をもう一度読まれてみてはどうでしょうか?
ファンクションキー、矢印キーなどは、getch() は2回呼び出されると
書かれているかと思います。また、その1回目は、0、または 0xE0 が
返されると書かれています。
    • good
    • 0
この回答へのお礼

リファレンスマニュアルとか無いんです。
全部無料の使ってますから。

ありがとうございました。
でも、プログラム自体には、
printf()関数の使い方以外問題は
無かったようですね。

これぐらいのことなら、getch()関数を
検索すればよかったのかなぁ・・・なんて。
(聞いておいてすいませんです。。。)

また、お世話になるかもしれませんが
よろしくお願いします。

お礼日時:2002/04/03 11:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!