请问为什么当输入和target不是同一数据类型的值时,cin只执行一次就开始进入死循环。
target是整型,我输入一个a,cin.rdstate检测输入流状态:错误,返回一个2,cin.clear清除错误标志,cin.sync清空输入流缓冲区:成功,返回一个0,再次检测输入流状态:无错误,又返回一个0,然后开始一直循环也不执行cin。
请问各位我这是缓冲区没成功清空还是什么别的原因?
请问为什么当输入和target不是同一数据类型的值时,cin只执行一次就开始进入死循环。
target是整型,我输入一个a,cin.rdstate检测输入流状态:错误,返回一个2,cin.clear清除错误标志,cin.sync清空输入流缓冲区:成功,返回一个0,再次检测输入流状态:无错误,又返回一个0,然后开始一直循环也不执行cin。
请问各位我这是缓冲区没成功清空还是什么别的原因?
因为错误输入a一直在输入流中没有被提取,clear()只是重置输入流错误flag,并没有提取a
如果你需要对用户非法输入进行验证,那么你得先把用户输入按字符串读出来,然后再尝试从字符串里按格式提取数据,如果提取失败,则提示用户输入错误,比如像下面这样
#include <iostream>
#include <string>
#include <sstream>
int main() {
std::string str;
while (std::cin >> str) {
std::istringstream ss(str);
int n;
if (ss >> n)
std::cout << "input number: " << n << '\n';
else
std::cerr << "invalid input: " << str << '\n';
}
return 0;
}