在循環本身中執行檢查和輸出可能更清晰。你可以通過打破無限循環或繼續一次循環來做到這一點。例如:
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命名空間標準;所以你不必添加總是標準」_姆毫無理想地完全相反。 –