루프 자체 내에서 검사하고 출력하는 것이 더 분명합니다. 무한 루프를 끊거나 일회성 루프를 계속하면이 작업을 수행 할 수 있습니다. 예를 들면 :
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 : _ "첫 번째는 네임 스페이스 std를 사용하므로 항상 std를 추가하지 않아도됩니다."_ Mm 이상적으로는 꽤 반대입니다. –