我有一個功能,詢問用戶是否要回傳主選單。
void menuReturn() {
char cont;
do {
cout << "Return to Main Menu? [Y/N]: ";
cin >> cont;
cont = toupper(cont);
if (cont == 'Y') {
system("cls");
break;
}
else if (cont == 'N') {
cout << "Closing program...";
exit(0);
}
else {
cout << "Invalid choice" << endl;
}
} while (cont != 'Y'|| cont != 'N');
}
但是當用戶輸入一個字串或一個大于九 (9) 的整數時,控制臺會顯示:
Return to Main Menu? [Y/N]: apple
Invalid choice
Return to Main Menu? [Y/N]: Invalid choice
Return to Main Menu? [Y/N]: Invalid choice
Return to Main Menu? [Y/N]: Invalid choice
Return to Main Menu? [Y/N]: Invalid choice
Return to Main Menu? [Y/N]:
如何擺脫多余的回傳選單訊息?我該如何讓它看起來像這樣?
Return to Main Menu? [Y/N]: apple
Invalid choice
Return to Main Menu? [Y/N]:
uj5u.com熱心網友回復:
將輸入作為字串收集,然后使用 string.length() 檢查它是否只有一個字符,如果是一個字符,則將其轉換為 char。您可以使用 strcopy 方法或僅轉換它
char character = string[0];
我不確定上面的方法是否有效,但請嘗試一下。希望有幫助!std::getline(std::cin, string)如果您想在控制臺中輸入空格,也可以使用std::cin 代替!
uj5u.com熱心網友回復:
這里發生的事情是char只能容納一個字符,但apple占用了 5 個字符。
在回圈的每次迭代中,std::cin一次僅從控制臺讀取 1 個字符(您已輸入)。放置列印陳述句std::cout << "Read: " << cont;通過以下輸出說明了這一點:
Return to Main Menu? [Y/N] apple
Read: a
Return to Main Menu? [Y/N] Read: pInvalid Choice
Return to Main Menu? [Y/N] Read: pInvalid Choice
Return to Main Menu? [Y/N] Read: lInvalid Choice
Return to Main Menu? [Y/N] Read: eInvalid Choice
要解決此問題,請使用 astd::string和std::getline,并確保驗證輸入的長度為 1。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/340451.html
上一篇:是的-僅驗證1個復選框被選中
