在循环本身中执行检查和输出可能更清晰。你可以通过打破无限循环或继续一次循环来做到这一点。例如:
do {
std::cout << "Enter a valid name" << std::endl;
std::cin >> name;
if (!validName(name)) {
std::cout << "It is not a valid name" << std::endl;
continue;
}
} while (false);
或者相反:
for (;;) {
std::cout << "Enter a valid name" << std::endl;
std::cin >> name;
if (validName(name))
break;
std::cout << "It is not a valid name" << std::endl;
}
我一般喜欢第二个,因为它可以很容易地注入反,所以你可以做处理,如果环路一些其它类型的错误身体失败超过一定次数。
for (int attempt = 0; attempt < 3; ++attempt) {
std::cout << "Enter a valid name" << std::endl;
std::cin >> name;
if (validName(name))
break;
std::cout << "It is not a valid name" << std::endl;
}
if (!validName(name)) {
std::cout << "Failed to get a valid name after 3 tries" << std::endl;
std::abort();
}
它总是**必须检查输入是否成功,例如使用'while(std :: cin >> name){...}'。如果'name'有进一步的限制来构成有效的输入,这些也应该被检查。 –
@ChrisK:_“首先使用using命名空间标准;所以你不必添加总是标准”_姆毫无理想地完全相反。 –