#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