我在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:Dev-Cpp with MINGW
编辑#1:
当我在屏幕上打印时,如
printf("%d",ch);
它显示两位数:例如-32和左箭头键为77 那我该怎么办呢。
答案 0 :(得分:1)
Windows的docs说
“_getch and_getwch函数从中读取单个字符 控制台没有回应角色。这些功能都不是 用于读取CTRL + C.每次读取功能键或箭头键时 函数必须被调用两次;第一个调用返回0或0xE0,和 第二个调用返回实际的密钥代码。“
答案 1 :(得分:0)
原因很可能是因为箭头键由扫描码表示。通常是2个十六进制值。在你的情况下两个字符。您可以做的是打印ch并按箭头键查看打印的内容。
printf("%c\n",ch);
答案 2 :(得分: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);
}