最近要解决程序运行时根据从控制台输入的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;
}