这似乎是一个愚蠢的问题,但我找不到太多关于这方面的信息。
我的代码接受用户输入,并且只期望接收't'
或'f'
。
我很难“保护”程序不受边缘情况的影响(例如:如果输入包含多个字符和/或空格,则它将遍历缓冲区中的每个char
,直到找到't'
或'f'
)。
我知道使用cin.fail()
只适用于int
。有没有类似的东西可以用于char
?我希望类似的东西可以起作用。我只是很难弄清楚如何定义cin
的错误/失败,以及如何阻止它在整个缓冲区中循环。
char choice = '0';
while(choice != 't' && choice != 'f') {
std::cout << "Is this answer true or false? (t/f) ";
std::cin >> choice;
if (error_with_input) {
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cout << "Error. char not entered. Please try again";
}
}
我是否从错误的Angular 看待这个问题?我是否应该将choice
变量设置为string
而不是char
?然后我可以使用getline()
,测试choice
的长度是否为1,如果是,那么最后测试choice
是否是't'
或'f'
。这似乎有点低效,但也许这是个更好的解决办法
1条答案
按热度按时间zfciruhq1#
将输入读取为
std::string
,或者至少读取为char[]
,是正确的方法。在读取输入后验证输入,而不是在读取时验证输入,例如: