2017-07-06 74 views
0

我試圖實現具有退格功能的控制檯程序。控制檯接受我定義的許多有效命令。例如:如何使用退格,而不使用空間字符刪除控制檯最後一個字符?

輸入:

enter image description here

輸出:

enter image description here

我使用switch語句,它檢查由getchar()返回的當前炭。

switch (inChar) 
    { 
     case '\r': 
     case '\n': 
     { 
      ... 
     } 

     case 0x18:      // ^x 
     { 
      ... 
     } 

     case 0x08:      // backspace 
     { 
      printf("\b \b"); 
      break; 
     } 

     default: 
     { 
      inBuffer[inBufIndx++] = inChar; 
      inBuffer[inBufIndx] = 0; 
      printf("%c", inChar);  // echo character 
     } 
    } 

上面的代碼給出了擦除字符的外觀,但放置了一個空格字符。這適用於大多數情況下,如擦除ohelo但擦除o關閉helpo時不起作用。我的shell不能再解釋命令,因爲在oo

處打印的空格字符如何在需要擦除的輸入末尾實現字符的退格?

編輯: RICI是完全正確的。我沒有刪除我在inBuffer中從控制檯中刪除的字符。下面的代碼給出了所需的功能。

 case 0x08: 
     { 
      printf("\b \b"); 
      inBuffer[inBufIndx--] = NULL; 
      break; 
     } 
+0

爲什麼只是'的printf(「\ B」)工作'是不夠的? –

+0

我想'的printf(「/ B」)',但只是光標移動回一個字符,並沒有刪除不需要的字符。上面的代碼將光標移回,在不需要的字符上打印一個空格,然後再次移回光標,以便我可以重寫該空間。 –

+0

聽起來像是你可能需要在嘗試執行之前刪除從命令字符串結尾的空格。 –

回答

0

想必,你需要(通過遞減inBufIdx並覆蓋舊的字符有0)從inBuffer刪除字符。屏幕顯示的內容應該是無關緊要的。

順便說一句,退格空間,退格鍵序列不會在右邊緣

相關問題