下面是C++中簡單菜單的代碼。出於某種原因,如果您給它垃圾輸入,它會正確反應(「請再次嘗試您的選擇」)。然而,它會再次通過循環再次發出錯誤消息,然後最終恢復正常運行。在C++中重複循環
編輯
輸入變量是char。如果垃圾輸入只有一個字符長度,那麼該循環就像它應該的那樣工作。如果在用戶被允許再次輸入任何內容之前有任何額外的字符會導致循環被執行超過一次。
char input = 0;
while (input != 4)
{
cout << "1. Circle";
cout << "\n2. Rectangle";
cout << "\n3. Triangle";
cout << "\n4. Quit";
cout << "\nChoose a shape: ";
cin >> input;
switch(input)
{
case '1':
circleFunctions();
break;
case '2':
rectangleFunctions();
break;
case '3':
triangleFunctions();
break;
case '4':
exit(4);
default:
cout << "\nPlease try your selection again...\n";
input = NULL;
cin.ignore();
break;
}
cin.ignore();
cout << "\n";
}
看到這個常見問題:爲什麼我的程序進入一個無限循環當有人進入非法字符?(HTTP://www.parashift。 com/C++ - faq/stream-input-failure.html) - 你使用'ignore'錯誤而不是調用'clear'。 – ildjarn 2012-08-05 00:14:56
我會假設輸入是一個int。你問什麼? – 2012-08-05 00:15:20
正如Xero所回答的那樣,std :: cin.clear()應該修復它,但是要注意你的輸入類型,它看起來像你將它比作while語句中的一個數字,但在case語句中它是一個char 。 – SMK 2012-08-05 00:23:55