我正在开发一个程序,使用malloc
和realloc
函数在用户输入字符串时实时递增指针缓冲区。
问题是,我想阻止用户点击 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);
答案 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>