关于c++里的getline()函数的问题

来源:百度知道 编辑:UC知道 时间:2024/05/04 19:39:42
假设在一下程序中
#include<iostream>
#include<string>
using namespace std;
int main()
{string name1;
string name2;
cout<<"Enter your first name: ";
getline(cin,name1);
cout<<"Enter your last name: ";
getline(cin,name2);
cout<<"Here's the information in a single string: "<<name2<<", "<<name1<<endl;
return 0;
}
显示"Enter your first name: "后输入第一个名字后按回车,程序不执行下一条cout,继续输入的字符依然在输入流中,再次输入回车,执行第二个cout,然而此后的输入实际上已经没有意义。
想问一下getline(cin,string)函数是如何处理换行符的?
注意这里的getline()函数并非是istream里的类方法,而是string里的友元

#include<iostream>
#include<string>
using namespace std;
int main()
{
string name1;
string name2;
cout<<"Enter your first name: ";
getline(cin,name1,' '); //修改后getline(cin,name1);
cout<<"Enter your last name: ";
getline(cin,name2);
cout<<"Here's the information in a single string: "<<name2<<", "<<name1<<endl;
return 0;
}
这个程序运行结果可能就是你遇到问题吧.
你的getline函数很有可能默认的结束字符不是换行字符.
或者你改变了结束字符后忘记了编译,直接运行了.即: 拿这个程序来说, 就是修改第一个getline函数的结束符, 编译运行, 然后讲getline里面的' '去掉, 没有编译直接运行了.

getline读取结束字符并将其抛弃. 你编写的程序在正确编译运行的前提下没有问题.

getline函数保留换行符在输入流中,并且以换行符做为整行结束的标准。所以当读取整行的数据的时候,回车仍然留在输入中,所以你这个时候再输入数据等于是在一个回车以后输入。那么当你第二个getline执行时,就是相当于先读取回车,就会判断此行已经结束,所以后面输入的内容是不会被读取的。
所以你可以在第一个getline后面再加上一个get(),把回车读取了就可以了。
我记得我当时是这么处理的,但是时间久了不敢完全肯定,你可以去调试一下