阻止用户按退格键

时间:2013-12-02 16:44:13

标签: c backspace

我正在开发一个程序,使用mallocrealloc函数在用户输入字符串时实时递增指针缓冲区。

问题是,我想阻止用户点击 Backspace 来纠正输入。 是否可以在使用getche()时以某种方式阻止 Blackspace 键?

我的最终程序将有两个输入:一个没有 Backspace (你不能回去),另一个带有 Backspace 。 (您可以更正输入,然后按Enter键。)

char *szString;
char *tmp;
int i = 0;
char c;

szString = '\0';
szString = malloc(1);

printf("Enter a string: ");

while ((c = getche()) != '\r')
{
    if(c = 0x08) // BackSpace
    {
        //
    }
    szString[i] = c;
    i++;
    tmp = realloc(szString, i+1);
    szString = tmp;
}

szString[i] = '\0';

printf("\nYou typed: %s", szString);

4 个答案:

答案 0 :(得分:1)

以下是函数的粗略实现,如果退格,则返回-1,而不是charatcer本身

char read_all_except_backspace()
{
    char ch;
    system("stty raw");
    ch = getchar();
    system("stty cooked");
    if(ch == 127)
        //value of backspace in my unix implementation is 127,i doubt it :-/
        return -1;
   else
      return ch;
}   

如果在Windows上你可以使用getch而不是上面的函数。如果读取字符是退格,则输入输入。你可以通过将它打印为整数来找到退格的值。

上述内容可以通过类似的方式在Windows系统上实现。

char ch=0,str[100];
int i=0;
while(ch!=10)//enter pressed
{
    ch = getch();
    if(ch == 127)
        continue;
    str[i++]=ch;
}
str[i-1]=0;

答案 1 :(得分:1)

新答案:好的,然后我会更新代码以打印字符串的最后一个字符(再次),将光标前进到退格区之前的位置(并跳过其余代码)。

原始答案:为什么不只是使用getch()来打印和处理角色 - 除非它是退格!

答案 2 :(得分:0)

getche()函数自动回显读到屏幕的字符。如果您希望退格键“已删除”已输入的字符,则必须重新回显(重新打印)在退格键之前输入的最后一个字符,以使其“显示为”退格键未注册。

答案 3 :(得分:0)

是的,只是检查用户是否正在按退格键,如果检测到退格,则忽略不要增加下标变量的值并使用continue或将代码置于内部if else阻止并跳过退格部分< / p>