我有这样的: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