optionTest是一个字符串,option是一个char。当我输入类似"ee e"的内容时,就会出现问题。尽管我忽略了/清除了,最后一个"e"还是被抓住了。我希望只要输入不是一个字符,就可以运行验证循环。
cin >> optionTest;
while (optionTest.length() != 1) {
cout << "Invalid input. please try again." << endl;
cin.ignore();
cin.clear();
//receive option
cin >> optionTest;
}
option = optionTest[0];
来自std::basic_istream::ignore()
的描述:
basic_istream& ignore( std::streamsize count = 1, int_type delim = Traits::eof() );
它从流中提取字符并丢弃它们,直到出现以下任何一种情况:
提取CCD_ 3个字符。当
count
等于std::numeric_limits<std::streamsize>::max()
时,在特殊情况下禁用此测试
由于使用空括号进行调用,count
为1,因此只提取一个字符(在您的情况下为空格字符(。
尝试cin.ignore(std::numeric_limits<std::streamsize>::max())
(或者至少是任何足够大的数字(。