我正在尝试从用户那里读取多个 Strings
和 ints
。我想使用成对的 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/