2016-07-27 192 views
0

我正在使用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; 
} 

我不想“输入一个整数。

+0

您基本上想要的是'curses'的WinAPI等效项。 Windows提供[控制台](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682010(v = vs.85).aspx)。 – jxh

+0

@jxh这并没有什么帮助。 – ThE411

+0

@ ThE411在我的回答中,我对user3121023的评论进行了大量扩展。我希望这有帮助。 –

回答

0

”和由用户输入的数字是在输出2条不同的线路保持一个计数变量来告诉是否例如,从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();,因为您不希望每个backspace重新打印“输入整数:”