如何在C中正确执行键捕获?
我一直在想如何防止用户输入时出现不需要的输入。我的代码有点奇怪,因为当用户按下backspace时,应该删除的字符仍然在屏幕上如何在C中正确执行键捕获?,c,error-handling,keypress,C,Error Handling,Keypress,我一直在想如何防止用户输入时出现不需要的输入。我的代码有点奇怪,因为当用户按下backspace时,应该删除的字符仍然在屏幕上 #include<stdio.h> #include<conio.h> #include<ctype.h> int main(void) { char ch; while(1){ ch=getch(); if(isalpha(ch)){
#include<stdio.h>
#include<conio.h>
#include<ctype.h>
int main(void)
{
char ch;
while(1){
ch=getch();
if(isalpha(ch)){
putchar(ch);
}
else if(ch=='\b'){
putchar('\b');
}
else if(ch=='\n'||ch==EOF)
break;
}
return 0;
}
#包括
#包括
#包括
内部主(空)
{
char ch;
而(1){
ch=getch();
if(艾萨帕(ch)){
putchar(ch);
}
else if(ch='\b'){
putchar('\b');
}
else if(ch='\n'| ch==EOF)
打破
}
返回0;
}
这里有一个如何处理多字符键的示例:
while (_kbhit())
{
int key = _getch(); // Get key
if (key == 0 || key == 224)
{
key = 256 + _getch(); // Handle multi-char keys
}
//handle imputs:
if (key == 256+75) ... // BTN_LEFT
else if (key == 256+77) ... // BTN_RIGHT
else if (key == 256+72) ... // BTN_UP
else if (key == 256+80) ... // BTN_DOWN
else if (key == 27) ... // BTN_ESC
else if (key == 'B') ...
}
我不知道如何删除屏幕上的单个字符,但您可以清除该行并重写字符,而无需最后一行
else if(ch=='\b'){
putchar('\b');
putchar(' ');
putchar('\b');
}
把它都放在一个缓冲区里
int main()
{
char c;
char input[2] = "X";
char line[1000] = "";
for (;;) {
input[0] = c = getchar();
if (isalpha(c)) {
strcat(line, input); // Not safe for production
putchar('\f'); // Go back to the start of line
fputs(line, stdout); // Print the line and NO newline
}
else if (c == '\n' || c == EOF) {
puts(""); // newline
break;
}
}
printf("You entered >%s<\n", line);
}
intmain()
{
字符c;
字符输入[2]=“X”;
字符行[1000]=“”;
对于(;;){
输入[0]=c=getchar();
if(isalpha(c)){
strcat(行,输入);//生产不安全
putchar('\f');//返回到行的开头
fputs(行,标准输出);//打印行,不换行
}
else if(c='\n'| | c==EOF){
puts(“”;//换行符
打破
}
}
printf(“您输入了>%s您可以在一个数组中维护整行,并在用户按下一个键时刷新屏幕上的整行。我尝试了您的代码,它成功了..我只是想知道为什么每次按enter键时我的代码都不会中断..我使用getchar()而不是getch()。我不知道getch()是什么)换行符的返回。你可以打印出你得到的ascii值。如果可以,我会的,但我还没有15个