我有這樣的:C++如何使用try catch並重新執行程序?
int main() {
try {
cin >> op;
}
catch (invalid_argument& e) {
cout << "Por favor indique um valor válido!!!";
}
}
而我想的是,當它進入捕撈,程序重新執行,這樣它會要求一個新的值給用戶。
我有這樣的:C++如何使用try catch並重新執行程序?
int main() {
try {
cin >> op;
}
catch (invalid_argument& e) {
cout << "Por favor indique um valor válido!!!";
}
}
而我想的是,當它進入捕撈,程序重新執行,這樣它會要求一個新的值給用戶。
而且我希望當它進入捕獲時,程序被重新執行,這樣它會向用戶要求一個新的值。
您可以將循環在你的try catch塊:
int main() {
bool have_invalid_argument = true;
while(have_invalid_argument)
try {
cin >> op;
have_invalid_argument = false;
}
catch (invalid_argument& e) {
cout << "Por favor indique um valor válido!!!";
}
}
}
你應該注意到雖然這
cin >> op;
通常不會拋出該異常。
您應該使用std::basic_ios::exceptions和std::ios_base::failure來檢測輸入分析錯誤。
如何解決這個問題?
選項1
都不要使用異常:
while(!(cin >> op)) {
cout << "Por favor indique um valor válido!!!";
cin.clear(); // Reset the failure state
std::string dummy;
cin >> dummy; // consume the invalid input
}
選項2
設置異常標誌,趕上合適的異常
int main() {
cin.exceptions(std::ifstream::failbit);
bool have_invalid_argument = true;
while(have_invalid_argument)
try {
cin >> op;
have_invalid_argument = false;
}
catch (std::ios_base::failure &fail) {
cout << "Por favor indique um valor válido!!!";
}
}
}
和我在哪裏放? –
@RuiEmanuelQuaresma您可以設置異常屏蔽標誌,並在另一個「catch」塊中捕獲_ appropriate_異常。 –
你能編輯你的代碼嗎? –
是這樣做的(這是一種可以繞過它的方式)
char op ;
int flag = 1;
do
{
cout << "Indique a opção que corresponda ao exercicio desejado: " << endl << "1 - ex1.1;" << endl << "2 - ex1.2;" << endl << "3 - ex1.3;" << endl << "4 - ex1.4;" << endl << "5 - ex1.5;" << endl << "6 - ex1.6;" << endl;
cin >> op;
if (op == '1' || op == '2' || op == '3' || op == '4' || op == '5' || op == '6') {
flag = 0;
}
else {
cout << "Por favor indique um valor válido!!!";
}
} while (flag == 1);
@MadPhysicist告訴過你了。你需要使用一個循環,直到它被告知停止循環(例如,'do {...} while(...);'或'while(...){...}'loop) –
這意味着我需要使用throw,這樣我的do ... while得到這個值拋出知道如何停止對嗎? –
你有你的解決方案,但我不會推薦這個。不應該使用C++中的異常來改變程序的控制流。如果你期望用戶有錯誤的價值,以至於你想給他另一個機會進入它,那不是一個例外。這並不總是很容易看到,但這似乎是一個不應該使用例外的場景。 – IceFire