字符串输入 - 忽略第一行
String input - first line being ignored
C ++和Java中的输入问题,如果我们在整数后输入一个字符串,它将跳过它转到下一条语句。
string name;
int age;
cout<<"Enter age";
cin>>age;
cout<<"Enter name";
getline(cin,name);
cout<<name;
cout<<age;
getch();
上面的代码不取名称它跳过这一行。它有什么问题......???
当读取整数值时,引入以完成该行的 [Enter] 仍在流中,并且getline(cin,name)
读取 [Enter]。
要解决此问题,请先刷新 cin 然后再获取字符串:
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();
我只回答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);
std::cin >> age;
std::getline(std::cin, name);
假设用户输入整数 5。这是输入流的样子:
5n ...
请注意,上述内容可能会有所不同。用户可以输入整数,然后输入空格字符。这两种情况同样有效。
也就是说,用户输入值并点击返回以提交。 operator >>
的格式设置为使用整数,但是一旦找到新行或空格提取将停止。输入操作后,新行应仍在流中。
n ...
现在,让我们看看name
的内容:
n "Bruce Wayne"n
当getline
执行时,一旦它在流中找到新行,它将停止搜索新输入。上一次提取的新行仍在流中,因此输入立即停止。什么都没有提取!
幸运的是,我们可以使用 ignore
方法从流中丢弃新行:
std::cin >> age;
std::cin.ignore(); // ignore the next character
std::getline(std::cin, age);
默认情况下,当给定 0 个参数时,std::cin.ignore
将丢弃流中的下一个字符。
这是一个活生生的例子。
相关文章:
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 在C++中,我如何接受不同于同一行的用户输入
- 如何确保用户在一行上提示输入一次时输入名字和姓氏?
- 忽略一行输入中的某些输入
- 丢失读入的每一行输入中的最后一个令牌
- 一行输入到多个变量
- 如何检查从键盘输入的特定整数值是否存在于C++文件中的一行或多行中
- 通过显示一行星号来创建条形图,该条形图将读取数据的输入文件
- 与 C++ 中一行中的用户输入数组元素相关的问题
- 如何在应用程序进行大量printf时,在固定输入的终端中设置最后一行
- 使用 getline 从输入文件读取一行到输出文件
- 标准输入未读取最后一行
- C :使用getline从文本文件中输入,要么跳过第一行,要么将其余部分弄乱
- 在C++的同一行输入值
- 使用 Getline C++ 将每一行输入存储在数组中
- scanf() 为最后一行输入提供错误的输出
- 如何在只有一行输入的向量中输入多个输入
- 仅对前一行输入使用cin.clear()或cin,ignore()
- 我如何在同一行输入2个不同的变量,同时使用setw进行格式化