2014-06-19 25 views
0

看起來您可以使用\b從控制檯中的當前行返回一個字符。但是,控制檯似乎無法跳出一行。在Windows控制檯中排隊

我想標記無效的用戶輸入紅色。輸入敲擊輸入後,用戶按下輸入這將在控制檯中放入不可換行的新行。

我的計劃是做到以下幾點:

  1. 檢查input的有效性。
  2. 如果無效,打印input.length()+1\b
  3. 打開控制檯紅色
  4. 打印input,打印\n

但是,該\b不會跳轉回用戶輸入線。所以,我有B計劃:

  1. 記住字符串的長度,這是用戶輸入(query_string
  2. 檢查input的有效性之前。
  3. 如果它是無效的,去排隊(爲進入輸入)
  4. 跳轉到query_string.length()字符
  5. 打開控制檯紅色
  6. 打印input,打印\n

不過,我不不知道如何使用console API來做到這一點。

+3

['SetConsoleCursorPosition'](http://msdn.microsoft.com/en-us/library/windows/desktop/ms686025(v = vs.85).aspx)。雖然我在這裏,['SetConsoleTextAttribute'](http://msdn.microsoft.com/en-us/library/windows/desktop/ms686047(v = vs.85).aspx) – chris

回答

2

至少有兩種方法可以做到這一點。

作爲@chris暗示在評論中,一種方法是保存用戶開始輸入位置的光標位置。當您發現輸入錯誤時,您將光標移回該位置並更改所輸入字符的文本屬性。

您可能不想將窗口向上滾動一行。如果這樣做,那麼當用戶發生錯誤時,窗口將顯示爲「跳躍」。這是一個非常震撼的用戶界面體驗。但如果你想嘗試,你可以撥打ScrollConsoleScreenBuffer

另一種方法是change the console mode,以便它在用戶輸入時不會自動回顯字符。相反,你單獨讀取每個字符,將它附加到輸入緩衝區,並且當用戶按Enter鍵確認。如果輸入有效,則發出換行符以移至下一行。否則,請備份並突出顯示錯誤的輸入。這聽起來好像還有很多工作要做,但這並不困難,而且它帶來了更好的UI體驗。