2015-11-07 161 views
0

像下面接受輸入,如何在編輯輸入後編輯用戶看到的輸入內容?

char ch = getch(); 
while(ch != '\r') { 
    if(ch == '\b') { 
     // do **something** here to remove the previous character from the stream 
    } else { 
     cout << ch; 
    } 
} 

我理解的流是用於插入和提取數據。

這是否意味着一旦一些數據被髮布到流中就會變得不可變?

回答

0

I/O庫中有一個緩衝區,位於進程和最終從終端或磁盤或某個其他設備讀取的OS /內核級系統調用之間。

一旦你的進程從I/O庫中獲得字節,你可以將它存儲在一個數組中,然後你可以在你的字節數組上實現'\ b'的行爲。

因此,每個字節都會經過從設備到I/O庫的緩衝區的管道線到您的進程中的緩衝區。您可以在流程的最後一個階段實現撤銷類型行爲,管道的前幾個階段現在是歷史記錄,您無法更改歷史記錄。

您可以使用ungetc將已讀取的字節推送回I/O庫的緩衝區,稍後可以再次讀取該緩衝區,但似乎與您的問題相符。