我有一個C程序,用一段代碼在while循環中讀取stdin(直到按下Enter鍵),詢問用戶名字。 我確保用戶只能輸入ASCII值從32到126防止鍵盤輸入中的ANSI轉義字符C
問題是,當我按下箭頭(光標)鍵,或類似的東西PAGE_DOWN或其他... 我最終的ANSI打印到終端的轉義序列([A,[6〜等))。
以下是代碼段。
char name[6];
char c;
uint8_t i = 0;
while ((c = getchar()) != '\n') {
if (c == 127 || c == 8) { // Checks if backspace or del is pressed
i--;
name[i] = ' ';
} else if (c >= 32 && c <= 126) { // Only legal key presses please!
name[i] = c;
i++;
} else {
}
if ((c >= 32 && c <= 126) || c == 127 || c == 8) {
printf_P(PSTR("%c"), c);
}
}
name[5] = '\0';
move_cursor(15, 18);
printf_P(PSTR("%s"), name);
我當然選擇忽略32到126範圍以外的ASCII值,那麼這是什麼原因?有任何想法嗎?乾杯!
提供了一個MCVE _https://stackoverflow.com/help/mcve_ – CIsForCookies
@CIsForCookies謝謝!我已經添加了合適的剪切,但是我正在編寫一個在串口上偵聽的終端,所以對於常規的stdout,代碼有點不同。 –
如果是一項任務,請單獨留下用戶的終端。如果您希望生產程序的用戶體驗更好,請使用GNU readline或類似的庫來代替stdio。 –