字符串输入 - 忽略第一行

时间:2013-10-21 18:28:23

标签: c++

在c ++和java中输入问题如果我们在一个整数之后输入一个字符串,它将跳过它转到下一个语句。

    string name;
int age;
cout<<"Enter age";
cin>>age;
cout<<"Enter name";
getline(cin,name);



cout<<name;
cout<<age;

getch();

上面的代码没有取名,它跳过这一行。它有什么问题...... ???

3 个答案:

答案 0 :(得分:2)

当读取整数值时,引入完成该行的[Enter]仍在流中,getline(cin,name)读取[Enter]。

要解决此问题,请先flush cin before getting the string

string name;
int age;
cout<<"Enter age";
cin>>age;
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // ignores all enters
cout<<"Enter name";
getline(cin,name);

cout<<name;
cout<<age;

getch();

答案 1 :(得分:2)

我只回答C ++,因为只有C ++代码存在。

std::getline将使用前一个operator >>在输入流上留下的换行符,因此它会返回。

一个简单的解决方法是忽略输入行上的所有剩余字符 cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

在使用std::getline

之前
#include<limits>
// ....
string name;
int age;
cout<<"Enter age";
cin>>age;

cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

cout<<"Enter name";
getline(cin,name);

答案 2 :(得分:0)

std::cin >> age;
std::getline(std::cin, name);

假设用户输入整数5.这就是输入流的样子:

5\n
...

请注意,上述情况可能有所不同。用户可以输入整数,然后输入空格字符。两者都是同样有效的情况。

即,用户输入值并点击返回提交。格式化operator >>以便整数将被消耗,但一旦找到新行或空格提取将停止。在输入操作之后,新行仍然应该在流中。

\n
...

现在,让我们看一下name的内容:

\n
"Bruce Wayne"\n

getline执行时,一旦在流中找到新行,它将停止搜索新输入​​。之前提取的新行仍在流中,因此输入立即停止。没有提取任何东西!

幸运的是,我们可以使用ignore方法从流中丢弃新行:

std::cin >> age;
std::cin.ignore(); // ignore the next character

std::getline(std::cin, age);

默认情况下,std::cin.ignore将在给定0个参数时丢弃流中的下一个字符。

这是 live example