我正在使用 getch()来读取键盘输入。但如果用户错误地输入了错误的数字,他们自然会想要纠正它。按退格键然后再次使 ch 等于0,并从输出中清除错误输入的数字(因此您无法再看到它)。我使用ASCII 8字符作为退格键,因为 getch()使用ASCII码。退格现在可以工作,但它现在可以删除整个输出行,包括输入一个整数:'。如何制作输入整数:'如果不将用户的输入放在换行符上,那部分是不可擦除的?例如:
int main(void)
{
int ch = 0;
here: printf("Enter an integer:\t");
ch = getch();
if(ch == 8) // 8 is ASCII for a backspace
{
ch = 0;
printf("\b \b");
goto here;
}
// some output
return 0;
}
我不想要"输入一个整数:'以及用户输入的数字在输出中的2个不同行上。
答案 0 :(得分:0)
保留一个计数变量来判断您是否应该删除。例如,在0处开始计数,并在每次键入实际字符时递增计数,并在每次成功删除字符时递减计数。当count为0时,不应该允许你删除count变量没有任何反应。应该这样,
int main(void)
{
int ch = 0;
int count = 0;
printf("Enter an integer:\t");
here: ch = getch();
if(ch == 8) // 8 is ASCII for a backspace
{
if(count > 0)
{
ch = 0;
count--;
printf("\b \b");
}
goto here;
}
else
{
printf("%c",ch);
count++;
goto here;
}
//perhaps add an else-if statement here so that
//when the enter key is pressed, you don't execute 'goto here'
// some output
return 0;
}
此外,我将here
的位置更改为ch = getch();
,因为您不希望每个退格键重新打印“输入整数:”