文章

7

粉丝

211

获赞

10

访问

37.1k

头像
getline与cin一起使用的问题
推荐阅读
P1261 北京大学机试题
发布于2022年3月7日 16:59
阅读数 6.3k

cin换行后会在缓冲区剩余 '\n',如果紧接着使用getline(),会直接读取为空字符串,导致输入有问题

解决:在cin之后getline之前,使用cin.ignore();

这坑害我调试了好久!

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

typedef struct {
	string str;
	int len;
} Str;

bool cmp(Str a, Str b) {
	return a.len < b.len;
}

void _print(Str *p, int m) {
	for (int i = 0; i < m; i++)
		cout << p[i].str << endl;
}

int main() {
	int n,i;
	string s;
	Str *p;
	while (cin >> n) {
		cin.ignore();
		p = new Str[n];
		i = 0;
		while (i < n&&getline(cin, s)) {
			if (s == "stop") break;
			p[i].str = s;
			p[i++].len = s.length();
		}
		sort(p, p + i, cmp);
		_print(p, i);
	}
	return 0;
}

 

登录查看完整内容


登录后发布评论

1 条评论
Hegel VIP
2023年3月28日 17:09

+1,我也调试了半天,获取两遍字符串才获取到

赞(0)