【发布时间】:2021-12-15 11:51:26
【问题描述】:
当调用cin>>(int) 和cin>>(string) 时,当第一个输入对于整数不正确时,似乎cin>>(string) 将无法检索第二个输入,即使它是正确的字符串。
源码简单如下:
cout<<"Please enter count and name"<<endl;;
int count;
cin>>count; // >> reads an integer into count
string name;
cin>>name; // >> reades a string into name
cout<<"count: "<<count<<endl;
cout<<"name: "<<name<<endl;
测试用例是:
案例1:输入字符(不适合int)和字符
请输入人数和姓名
广告位
计数:0
姓名:
案例 2:输入数字和字符
请输入人数和姓名
30 广告
计数:30
名称:广告
案例3:输入数字和数字(可以当作字符串)
请输入人数和姓名
20 33
计数:20
名称:33
【问题讨论】:
-
std::cin有一个可以检查的状态,例如通过std::cin.good()。输入可能会失败,而且经常会失败,所以你需要做点什么 -
第一次使用 cin 的状态/结果如何影响 cin 的第二次使用?还是说每次使用cin之前都需要检查或清除cin的状态?我从未在代码中看到任何对 cin 状态的预处理。谢谢。
-
@lst 1) "第一次使用 cin 的状态/结果如何影响第二次使用 cin?" 如果
cin处于无效状态,任何进一步的操作是没有意义的。 2) “或者这是否意味着在每次使用 cin 之前,需要检查或清除 cin 的状态?” 是的,需要养成检查操作是否成功的习惯,而不是假设它们做过。 3)“我从未见过代码中cin状态的任何预处理”if (cin>>count) {/* operation succeeded */ }