如何在C中正确执行键捕获?

如何在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)){

我一直在想如何防止用户输入时出现不需要的输入。我的代码有点奇怪,因为当用户按下backspace时,应该删除的字符仍然在屏幕上

#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个