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
- getline( cin,s,'\n' )不能读取最后一条输入的问题
- cin.getline不能输入两次
- 浅谈cin>>与cin.getline读取缓冲区中的‘\n’和空格的区别
- 解决cin.getline()未经输入就结束的问题
- cin和getline输入的一个小问题
- 各种输入方式的细节cin.get/cin.getline/getline...
- 文本输入cin ,cin.getline(name,n),cin.get(name,n),cin.get()
- getline读取不等待输入的问题
- 关于用cin cin.get() getchar(), getline输入时的结束符问题
- C++使用string.getline()和cin混合输入的问题(cin清空缓存)
- getline函数前面的不能出现cin
- getline(cin,s)
- cin gets getline cin.get等输入的区别
- cin后使用getline的小问题
- C++ 输入ctrl+z 不能再使用cin的问题
- C++ 输入ctrl+z 不能再使用cin的问题
- cin输入的问题
- VC问题:cin.get和cin.getline的区别?
- POJ 【3518】 Prime Gap
- 装饰器函数
- 搜索 bfs
- Problem 1002
- 顺序栈
- getline( cin,s,'\n' )不能读取最后一条输入的问题
- Fragment生命周期
- ecshop验证码不显示
- Struts2 笔记3
- CF 二分
- dfs深度优先搜索
- STM32f103 看门狗使用
- 利用select函数实现非阻塞式的socket accept
- C++实验3—定期存款利息计算器