停止退格表格删除某些输出

时间:2016-07-27 18:32:51

标签: c windows algorithm input char

我正在使用 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个不同行上。

1 个答案:

答案 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();,因为您不希望每个退格键重新打印“输入整数:”