当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的字符和字符
请输入计数和名称
ad st
计数:0
名称:
情况2:键入数字和字符
请输入计数和名称
30个广告
个数:30
名称:广告
情况3:键入数字和数字(可以视为字符串)
请输入计数和名称
20 33
个数:20
名称:33
答案 0 :(得分:5)
流具有内部错误标志,该标志一旦置位,就保持置位状态,直到您明确将其清除为止。当读取失败时,例如因为无法将输入转换为所需的类型,所以设置了错误标志,并且只要您不清除此标志就不会尝试任何后续读取操作:
int main() {
stringstream ss("john 123");
int testInt;
string testString;
ss >> testInt;
if (ss) {
cout << "good!" << testInt << endl;
} else {
cout << "bad!" << endl;
}
ss >> testString;
if (ss) {
cout << "good!" << testString << endl;
} else {
cout << "bad!" << endl;
}
ss.clear();
ss >> testString;
if (ss) {
cout << "good:" << testString << endl;
} else {
cout << "bad!";
}
}
输出:
bad!
bad!
good:john
答案 1 :(得分:0)
您可以使用
检查输入语句是否成功。cin.good()方法
如果输入语句失败,则返回false,否则返回true。这是一个小例子:
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int x;
// prompt the user for input
cout << "Enter an integer: " << "\n";
cout << "cin.good() value: " << cin.good() << "\n";
// get input
cin >> x;
cout << "cin.good() value: " << cin.good() << "\n";
// check and see if the input statement succeeded
if (!cin) {
cout << "That was not an integer." << endl;
return EXIT_FAILURE;
}
// print the value we got from the user
cout << x << endl;
return EXIT_SUCCESS;
}
输出:
Enter an integer:
cin.good() value: 1
asd
cin.good() value: 0
That was not an integer.