c++ - 使用 sstream 验证失败

标签 c++ validation integer sstream

cout << "\nPlease enter x-ordinate: ";

cin >> test;
stringstream ss(test);
ss >> x;
while(ss.fail())
{
ss.str("");
cin.clear();
cin.ignore(256, '\n');  
cout << "Please enter integer: \n";
cin >> test;
stringstream ss(test);
ss >> x;
cout << x << ss;    
}       

您好,我正在尝试测试用户的输入是否为整数,通过使用 sstream 来检查它是否可以转换为整数 x,但是一旦我输入了一个有效的整数,while 循环仍然证明为真,循环继续。有人可以帮忙吗?

最佳答案

您的代码有一个小问题...您有两个完全不同的同名变量,一个在循环条件中使用,一个在循环体内。这两个变量没有任何关联或联系。

而是重用第一个 ss 变量,通过设置它的字符串:

...
cin >> test;
ss.str(test);
...

您也没有清除循环中 ss 流的状态,只有 cin 的状态,这就是您的循环永远不会结束的原因。

我还建议您使用流可以用作 bool 条件这一事实,并且 operator>> 函数返回对流的引用,然后您可以执行类似

cout << "\nPlease enter x-ordinate: ";
getline(cin, test);

istringstream ss(test);
while(!(ss >> x))
{
    ss.clear();
    cout << "Please enter integer: \n";
    getline(cin, test);
    ss.str(test);
}

参见 here for an example of the above .


当然也可以直接使用cin:

int x;
while (!(cin >> x))
{
    cin.clear();
    cin.ignore(numeric_limits<std::streamsize>::max(), '\n');
    cout << "Please enter integer: \n";
}

参见 here for an example of the above .

关于c++ - 使用 sstream 验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36767773/

相关文章:

c++ - 使用 switch case 代替 if else

c++ - 为什么 sizeof(argv)/sizeof(argv[0]) 给我 C++ 中数组的大小?

c++ - 使用带有新 API 的编号索引进行无效转换

javascript - 货币验证

javascript - 如何在 JavaScript 中序列化 64 位整数?

python - QTableWidget 整数

android - 编辑文本整数

c++ - 从构造函数创建 QAbstractItemModel 对象

Excel 数据验证 - 正则表达式?

ruby - 如何使用 Ruby 检查域是否存在?