2017-05-08 21 views
-1
do { 
    std::cout << "Enter a valid name" << std::endl; 
    std::cin >> name; 

} while (!validName(name) && std::cout << "It is not a valid name" << std::endl); 

이름이 유효하지 않은 경우이 방법이 좋습니까? 그런 다음이 방법으로 줄을 입력하십시오.사용자 입력을 확인하는 것이 좋습니까?

+2

입력이 성공했는지 여부를 확인하는 데는 ** while (std :: cin >> name) {...}을 (를) 사용하는 것이 항상 필요합니다. 유효한 입력을 구성하는'name '에 대한 추가 제약 조건이있는 경우 이것도 검사해야합니다. –

+1

@ChrisK : _ "첫 번째는 네임 스페이스 std를 사용하므로 항상 std를 추가하지 않아도됩니다."_ Mm 이상적으로는 꽤 반대입니다. –

답변

0

루프 자체 내에서 검사하고 출력하는 것이 더 분명합니다. 무한 루프를 끊거나 일회성 루프를 계속하면이 작업을 수행 할 수 있습니다. 예를 들면 :

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(); 
}