文章
7
粉丝
211
获赞
10
访问
37.4k
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,我也调试了半天,获取两遍字符串才获取到