getline( cin,s,'\n' )不能读取最后一条输入的问题

来源:互联网 发布:linux自动挂载 编辑:程序博客网 时间:2024/05/16 02:51

最近要解决程序运行时根据从控制台输入的int a的值来确定输入a个字符串,然后再打印出每一个输入的字符串的问题。由于数组的大小是提前确定了的,不能在程序运行时再动态确定,所以用到了vector。读取每次输入的字符串用的是string类的getline( cin, s, '\n' )函数。但是经过调试,发现不能打印出最后一个输入的字符串。于是查阅资料,网上说使用getline( cin, s, '\n' )函数要连续输入2次回车,也有说进入C:\Program Files\Microsoft Visual Studio\VC98\Include目录,用记事本打开string,做如下修改

else if (_Tr::eq((_E)_C,_D)) 

{_Chg = true; 

_I.rdbuf()->snextc(); // 把这一行注释掉,也可删掉 

_I.rdbuf()->sbumpc(); //添加这一行,这行本来没有 

break; 

,依照此法做,发现在vs2015的上述目录中找不到上述要修改的地方。再查找资料,得知用cin.ignore(1024, '\n');函数可以忽略掉上一次输入的回车。于是在调用getline( cin, s, '\n' )前添加了cin.ignore(1024, '\n'),再调试,果然显示出了最后一行输入的字符串。源代码如下:
#include <iostream>
#include<vector>
#include<string>
using namespace std;

int main(int argc, char** argv)
{
int n;
cin >> n;
cin.ignore(1024, '\n');
vector<vector<string>>str(n);
for (int i = 0; i <n ; i++)
{
string s;
getline( cin, s, '\n' );
str[i].push_back(s);
}
vector<vector<string>>::iterator it;
for (it = str.begin(); it != str.end(); ++it)
{
vector<string>::iterator iter;
for (iter = (*it).begin(); iter != (*it).end(); ++iter)
cout << *iter;
cout << endl;
}
return 0;
}
0 0