2017-05-08 84 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:_“首先使用using命名空间标准;所以你不必添加总是标准”_姆毫无理想地完全相反。 –

回答

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(); 
} 
相关问题