Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止用户按backspace键_C_Backspace - Fatal编程技术网

防止用户按backspace键

防止用户按backspace键,c,backspace,C,Backspace,我正在开发一个程序,它使用malloc和realloc函数在用户键入字符串时实时增加指针缓冲区 问题是,我想防止用户点击Backspace来更正输入。 在使用getche()时,是否可以在C中以某种方式阻止Blackspace键 我的最终程序将有两个输入:一个没有退格(你不能返回),另一个有退格。(您可以更正输入,然后按Enter键) 下面是一个函数的粗略实现,如果将字符本身退格,则返回-1 char read_all_except_backspace() { char ch;

我正在开发一个程序,它使用
malloc
realloc
函数在用户键入字符串时实时增加指针缓冲区

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

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


下面是一个函数的粗略实现,如果将字符本身退格,则返回-1

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而不是上述函数。如果读取字符是backspace,则忽略输入。您可以通过将backspace的值打印为整数来查找它

在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;

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


原始答案:为什么不直接使用
getch()
打印并处理字符-除非是退格

getche()函数自动将读取的字符回显到屏幕上。如果希望backspace“不删除”已输入的字符,则必须重新回显(重新打印)在backspace之前输入的最后一个字符,以便“看起来”backspace键未注册。

是,只需检查用户是否按backspace键,如果检测到退格,则只需忽略不增加下标变量的值并使用continue或将代码放入if-else块中,只需跳过退格部分

szString='\0'
应该给您一个整数到指针的警告&下一行的
malloc
使它变得多余……因为getche()实时打印您键入的内容。我不想使用其他函数。@user2729661只需在循环中打印字符即可。效果是一样的。@GuillermeBernal,很抱歉,对于这个练习,只允许使用getche(),所以我想问是否可以使用它来处理退格。完全正确,但是当使用getche()按backspace时,它实际上并不会删除最后一个字符。
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;