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;
}

当我按任何键时运行此应用程序时,计数会一一增加,
但是当我按下箭头键时,计数会增加二二
问题是什么。以及如何解决?

操作系统:Windows 7
IDE:带有 MINGW 的 Dev-Cpp

编辑#1:
当我在屏幕上打印 ch 时

printf("%d",ch);

它显示两位数字:例如左箭头键的 -32 和 77。
那我该如何解决。

4

3 回答 3

1

Windows的文档说

"_getch 和_getwch 函数从控制台读取单个字符而不回显该字符。这些函数都不能用于读取 CTRL+C。读取功能键或箭头键时,每个函数必须调用两次;第一次调用返回 0 或 0xE0,第二次调用返回实际的键码。”

于 2013-09-02T14:31:27.260 回答
0

按箭头然后退格检查。

当我按向上箭头时在 GCC 中

出现以下字符串。这是三个字符的组合。

^[[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 回答
0

原因很可能是因为箭头键由扫描码表示。这通常是 2 个十六进制值。在你的情况下,两个字符。您可以做的是打印 ch 并查看按箭头键时打印的内容。

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