c++ - 当循环失败时,读取 int 和 string C++

标签 c++ while-loop cout cin

我正在尝试从用户那里读取多个 Stringsints。我想使用成对的 Name 和 Age 并继续这样做,直到用户输入“完成”。但是我的 do-while 很早就崩溃了,我不知道为什么?

int number;
string name;
do
{
cout << "Your name: " ;
getline(cin, name);    
cout <<name<< " age: " ;
cin >> number;
}
 while (name!="done");

编辑:同样在输入“完成”后,我还必须在年龄上输入“完成”,这是为什么?

最佳答案

我尝试在 VS 2010 中运行您的程序,即使我输入了一个有效数字,令我惊讶的是,该程序会跳过读取下一个名称。

在我看来,cin >> number 不会吞下我在数字后自然输入的 '\n'。

我尝试在每个 cin >> number 之后添加对 getchar() 的调用,程序出人意料地开始按预期工作。

因此结论是,即使在输入的数字正常之后,您也应该在 cin >> number 之后进行 clean()/ignore(),或者求助于使用 getline()(然后解析)用于读取数字。

如果不想输入“done”的年龄,则必须在输入后立即跳出循环。我的最终代码:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    int number;
    string name;
    while(true)
    {
        cout << "Your name: " ;
        getline(cin, name);
        if(name == "done") 
            break;
        cout <<name<< " age: " ;
        cin >> number;
        cin.clear();
        cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
    }
}

关于c++ - 当循环失败时,读取 int 和 string C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9479934/

相关文章:

c++ - OpenCV 无法读取 MP4 视频

c++ - 为什么使用 for_each 是错误的?

c++ - C++11 中的 lambda 表达式是什么?

java - 尝试使用 while 循环继续循环,直到用户输入 n (Java)

c++ - C++ 中的字符数组损坏

c++ - 将结构 vector 传递给函数

java - 返回始终为字母数字的字符串值

linux - Shell sh ,语法 while(condition)

c++ - 从嵌入式 python 打印到 cout

c++ - cout 随机坐标 vector n 次