问题背景:
我想设计程序,可以让用户任意按键,按到可打印字符时存进数组,否则舍弃,检测到回车键结束输入
代码如下:
#include
#include
#include
int main()
{
char temp[100] = { 0 };
char c = 0;
int i = 0;
int I = 0;
int a;
int A[100] = {};
c = getche();
while (c != '\r')
{
a = isprint(c);
A[I++] = a;
if (a)
temp[i++] = c;
else
{
temp[i++] = '*';
}
c = getche();
}
printf("\n");
for (int i = 0; i < 10; i++)
{
printf("%d ", A[i]);
}
printf("\n");
puts(temp);
return 0;
}
测试按键: F1,F2,3键,4,5
运行结果:
问题:
发现如果按到一些不会打印字符的键,如F1,F2等,例如getche()对F1能读两次,第一次的ASCLL码为0,第二次的不为0,而且是可打印字符的ASCLL码。为什么会出现这种问题,该怎么解决?
'getche()' 函数是一个在控制台程序中常用的函数,它可以读取一个字符并立即显示到屏幕上。 这个函数在读取 F1 按键时会出现错误,这是因为 F1 按键不是一个可打印字符,它会产生一个特殊的控制码。这个控制码可能会在读取到之后被转换为可打印字符,导致'getche()'读取了两次。
解决这个问题的一种方法是使用 'getch()' 函数来代替 'getche()',因为'getch()' 函数会直接读取按键的 ASCII 码,而不是将按键转换为可打印字符。 另外,结合 if-else 或 switch 来判断回车键和其他非可打印字符(非法字符)的ASCLL码。如果是的话就忽略,如果不是的话就将其存储起来。
仅供参考,望采纳,谢谢。