[英]How can I read from keyboard a string of only 4 alphanumeric characters, not one less, not one more
[英]How can I read only one character and ignore the others if the users types more?
我有一個只能用 C 制作的項目(我不允許使用 C++)。 現在我正在處理 UI(控制台中顯示了一個小菜單,每個選項都分配了一個 0 到 6 的數字,用戶輸入數字,點擊 Enter 等等)。
我的閱讀選項功能有問題。
起初我試過
int option;
scanf("%d", &option);
但這在我輸入字符時引起了問題。
我嘗試閱讀一個字符:
char option;
scanf("%s", &option);
option -= '0';
這讓我可以把它當作一個數字來對待,並且在第一次測試中工作得很好,讓我可以驗證該選項是否有效(它不是一個字母,它是一個介於 0 和 6 之間的數字)。
問題是我可以輸入多個字符,並且所有字符都將存儲在內存中的某個位置。 這顯然很糟糕。
我嘗試使用"%c"
閱讀,但這將顯示我輸入的字符串中每個字符的錯誤消息。
為了讓它更清楚一點,這是函數
int readOption(int maxOp)
{
char option = -1;
while(option < 0 || option > maxOp)
{
scanf("%c", &option);
option -= '0';
if(option < 0 || option > maxOp)
printf("Invalid option!\nTry again: \n");
}
return option;
}
如果我輸入“ abc
”,錯誤信息將被打印 3 次。
那么如何確保輸入的任何額外字符都被忽略呢?
嘗試這個
int ch;
scanf(" %c", &option);
while((ch = getchar()) != '\n');
未經測試,購買您可以嘗試這樣的事情:
scanf(" %[0-6]1d*[^\n]", &option);
僅當輸入是 0 到 6 之間的單個數字時,對scanf
的調用才有效,忽略前導空格。 *
抑制之后不在此范圍內且不是換行符的任何字符。
您可以使用getc()
來完成這樣的工作:
int main(){
char choice = getc(stdin);
fflush(stdin);
}
現在choice
是第一個輸入的字符,刪除第一個字符后輸入的所有內容,因此不會中斷任何其他用戶輸入。
通常,當用戶輸入時,它存儲在一個名為stdin
的特殊緩沖區中,如果在使用fflush(stdin)
讀取第一個字符后不刪除該緩沖區,它將中斷任何未來的用戶輸入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.