首页 > 解决方案 > 使用 std::istringstream 测试号码失败

问题描述

我试图要求用户输入一个数字,重复直到他们输入。

如果用户在第一次尝试时输入数字,则下面的代码运行良好。但是,如果他们先输入一个非数字字符,然后输入一个数字,则循环永远不会像我预期的那样中断。

这是什么原因?

注意:如果我iss在 while 循环中声明,它会起作用。虽然感觉有点直观,但我仍然很想知道为什么会这样以及解决这个问题的最佳方法是什么。谢谢!


int main() {
    
    std::istringstream iss;
    int age = 0;

    while (true){
        std::string myStr;
        std::getline(cin, myStr); // note: clearing entire line as need cin empty for next bit of code
        iss.str(myStr);
        
        if (iss >> age){
         break;   // iss >> age fails even if the user inputs a number (if first enter a non-numeric value).
        }
        else{
         continue;   
        }
    }
    return 0;
}

标签: c++consolenumbersistringstreamsstream

解决方案


推荐阅读