0

Cで小さなプログラムを書いて
います。プログラムのコードは以下の通りです。

#include<stdio.h>
#include<conio.h>
int main()
{
  char ch;
  int count = 0;
  while(1){
   ch = getch();
   count++;
   printf("%d\n",count);
  }
  return 0;
}

このアプリケーションを実行すると、任意のキーを押すとカウントが1つずつ増加しますが、
矢印キーを押すとカウントが2つずつ増加します。
何が問題ですか。そして、それを修正する方法は?

OS:Windows 7
IDE: Dev-Cpp with MINGW

編集#1:
chを画面に印刷すると

printf("%d",ch);

2 桁で表示されます。たとえば、左矢印キーの場合は -32 と 77 です。
どうすれば修正できますか。

4

3 に答える 3

1

Windowsのドキュメントによると

「_getch および _getwch 関数は、文字をエコーせずにコンソールから 1 文字を読み取ります。これらの関数のいずれも、CTRL + C を読み取るために使用することはできません。ファンクション キーまたは矢印キーを読み取る場合、各関数を 2 回呼び出す必要があります。最初の呼び出しは0 または 0xE0 を返し、2 番目の呼び出しは実際のキー コードを返します。」

于 2013-09-02T14:31:27.260 に答える
0

その理由はおそらく、矢印キーがスキャン コードで表されているためです。これは通常 2 つの 16 進数値です。あなたの場合、2文字。できることは、ch を印刷して、矢印キーを押したときに何が印刷されるかを確認することです。

printf("%c\n",ch);
于 2013-09-02T14:32:06.427 に答える
0

矢印を押してからバックスペースを押して確認してください。

上矢印を押すとG​​CCで

この下の文字列が表示されます。これは3つの文字の組み合わせです。

^[[A ==> ^[  [  A  

このため、カウントは合計で 4 増加し、Enter も追加されます。

これを修正するには、入力を文字列に読み取り、最初の文字を c に割り当てますが、文字を入力した後、Enter キーを押す必要があります。ここでは、矢印を押すと、文字列の長さをチェックしてカウントの増分と割り当てをエスケープする機会がいつでもあります。

  char c,ch[2];
  int count = 0;
  while(1){
   scanf("%s",ch);
   c =ch[0];
   count++;
   printf("%ld\n",strlen(ch));
   printf("%d\n",count);
  }
于 2013-09-02T14:58:51.273 に答える