2016-07-27 95 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重新打印「輸入整數:」