为啥用了cin之后,getline失灵了

音视频达人 2016-11-16 04:42:31
#include <stdio.h>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
int In = 0;
cin>>In;
string * stb = new string[In];
vector<string> vect;
for(int i = 0 ; i < In; i++)
{
getline(cin,stb[i]);
vect.push_back(stb[i]);
}
sort(vect.begin(),vect.end());
vector<string>::iterator it;
for(it = vect.begin();it != vect.end(); it++)
{
cout<<*it<<endl;
}

return 0;
}

输入:
2
zhongguo

打印:

zhongguo

使用了cin之后,getline(cin,stb[i]); stb[0] 输入默认总是空的字符串,
去掉cin 之后,就好使了,想不明白啊!!!!
...全文
248 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2016-11-16
  • 打赏
  • 举报
回复
cin之后加一句getchar();接收了缓冲区中的\n
小灸舞 2016-11-16
  • 打赏
  • 举报
回复
因为你输入完In后,会有遗留的回车符,会被getline读取 在getline(cin, stb[i]);前面加一句fflush(stdin);清空输入缓冲区就行了。

#include <stdio.h>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
	int In = 0;
	cin >> In;
	string * stb = new string[In];
	vector<string> vect;
	for (int i = 0; i < In; i++)
	{
		fflush(stdin);
		getline(cin, stb[i]);
		vect.push_back(stb[i]);
	}
	sort(vect.begin(), vect.end());
	vector<string>::iterator it;
	for (it = vect.begin(); it != vect.end(); it++)
	{
		cout << *it << endl;
	}

	return 0;
}
赵4老师 2016-11-16
  • 打赏
  • 举报
回复
cin.clear(); cin.sync();

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧