id | video_id | date
1 | 2 | 2016-02-01
2 | 1 | 2016-02-02
以上是代码,它适用于大多数字母数字组合,它拒绝用户输入,如a,10aa,1003abc等。但是,它在100a,100b等输入上传递。这可能是什么原因?
答案 0 :(得分:1)
cin >> input
一找到任何非数字就会停止阅读,因此“100a”被解释为两个标记:“100”和“a”。
“100”转换为int
并退出while(std::cin.fail())
循环。这留下了“a”坐在流中,以便下次阅读cin
。
快速解决这个问题的方法(快速编写和解释,如果输入容易出错则不是最快的执行)
std::string token;
while (true) // or a countdown to kick out the truly moronic
{
cin >> token;
try
{
return std::stoi(token);
}
catch (...) // don't really care why std::stoi failed
{
}
}
更快的方法,如果需要错误,请使用strtol
or similar并跳过异常处理开销。