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

时间:2014-11-29 19:24:43

标签: c error-handling keypress

我一直试图弄清楚如何防止在用户输入时出现不需要的输入。我的代码有点奇怪,因为当用户按退格键时,字符仍应在屏幕上删除时。

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

3 个答案:

答案 0 :(得分:1)

试试这个

else if(ch=='\b'){
   putchar('\b');
   putchar(' ');
   putchar('\b');
}

答案 1 :(得分:1)

将所有内容保存在缓冲区中......

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

答案 2 :(得分: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')    ...
}

我不知道如何在屏幕上删除单个字符,但您可以清除该行并重写字符而不使用最后一行