题解 | #成绩排序#
成绩排序
https://www.nowcoder.com/practice/3f27a0a5a59643a8abf0140b9a8cf1f7
#include<iostream>
#include<algorithm>
using namespace std;
//复习结构体
struct Student {
int stuNum;
int score;
};
const int maxN = 101;
struct Student list[maxN];
bool Compare(Student x, Student y) {
if (x.score == y.score) {
return x.stuNum < y.stuNum;
} else {
return x.score < y.score;
}
}
//Compare函数定义规则:
//如果x,y是排序规则需要的顺序,则返回1
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d %d", &list[i].stuNum, &list[i].score);
}
sort(list, list + n, Compare);
for (int i = 0; i < n; i++) {
printf("%d %d\n", list[i].stuNum, list[i].score);
}
//学习自定义比较函数并用于sort
//注意scanf '\n'吸收的问题
//https://zhuanlan.zhihu.com/p/141802781
//对于scanf的格式串来说
//任何的空格字符(whitespaces)会匹配多个(可以没有)空格字符。所以当你敲下换行的时候,scanf还没法返回,因为他不知道后面还有没有更多的空格字符。此时scanf只有读到下一个非空格字符(比如说你的输入中的a字符),或者输入流被关闭(比如读到EOF)的时候,才会返回。
//https://www.zhihu.com/question/557303828
}
Caution: scanf读%c之前必须要getchar()吸收上一次输入结束时输入的\n