我的問題是,我試圖做一個菜單作爲我的程序的一部分。有輸入的條件語句,我的else
語句應該說輸入無效,並等待輸入(以便讓用戶知道他們輸入了一些無效的內容)。爲什麼當我輸入一個char時,這個特定的cin.get()語句在C++中不起作用?
這是相關的片段,以及我的嘗試:
void main_menu() {
int opt;
system("CLS");
std::cout << "Main Menu" << std::endl;
std::cout << "\n\nWhat would you like to do?" << std::endl;
std::cout << "1) Fight" << std::endl;
std::cout << "2) Store" << std::endl;
std::cout << "3) Exit" << std::endl;
std::cin >> opt;
std::cin.ignore();
if (opt == 1) {
return main_menu();
}
else if (opt == 2) {
return main_menu();
}
else if (opt == 3) {
return;
}
else {
system("CLS");
std::cout << "Invalid!" << std::endl;
std::cin.get(); //error, but not seen in list or console
}
}
int main() {
main_menu();
return 0;
}
我似乎什麼已經搞砸了的上是else
。當我運行它時,代碼似乎通過了我設置的std::cin.get()
。
我想要的輸出:
Input = 1 // valid input
go to statement 1 (empty for time being.)
Input = 6 // invalid, but is handled with the else:
cout << "Invalid!" << ....
//pause
Input = 'a' //invalid, should be like above:
cout << "Invalid!" << ....
//pause // in reality, it passes
我已經嘗試了一些方法,看着比SO其他網站的一些職位(見張貼Why is the Console Closing after I've included cin.get()?)(我曾嘗試cin.ignore()
後cin >> var
方法已經不靈) ,但沒有工作。
它確實有關換行符等的說法,但我不明白。有人可以解釋尾隨的換行符是如何工作的,爲什麼我的代碼段不工作?
編輯:cin.get()
的其他陳述已在我的實際代碼中工作。
編輯:我試着輸入一個數字以外的無效選項,但它沒有工作(比如字符)。 Nums雖然工作。所以現在的問題是如何處理除int,float,double等數據類型。
'opt'是'int'類型,是不是? –
是的,我已經從鏈接文章中讀到它可能是來自int輸入的尾隨換行符。 –
做'std :: cout <<(int)std :: cin.get();',那麼你可以看到什麼字符被讀取。如果您在 –