读入n名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。
输入格式:每个测试输入包含1个测试用例,格式为
第1行:正整数n
第2行:第1个学生的姓名 学号 成绩
第3行:第2个学生的姓名 学号 成绩
... ... ...
第n+1行:第n个学生的姓名 学号 成绩
其中姓名和学号均为不超过10个字符的字符串,成绩为0到100之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。
输出格式:对每个测试用例输出2行,第1行是成绩最高学生的姓名和学号,第2行是成绩最低学生的姓名和学号,字符串间有1空格。
输入样例:
3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
输出样例:
Mike CS991301
Joe Math990112
我写的程序如下,不知道为啥执行到return 0突然触发一个中断
#include
#include
#include
struct infor {
char name[11];
char XH[11];
int score;
};
int CMPSCORE(const void* d, const void* b)
{
struct infor *p1 = (struct infor *)d;
struct infor *p2 = (struct infor *)b;
if ((p1->score)>(p2->score))
return 1;
if ((p1->score)<(p2->score))
return -1;
else return 0;
}
int main()
{
int i,t=0,g;
struct infor *a;
scanf_s("%d", &i);
getchar();
a = (struct infor *)malloc(i * sizeof(struct infor *));
for (t = 0; t < i; t++)
{
for (g = 0; (g < 10); g++) {
scanf_s("%c", &(a[t].name[g]));
if (a[t].name[g] == ' ')
break;
}
a[t].name[g] = '\0';
for(g = 0; (g<10); g++){
scanf_s("%c", &(a[t].XH[g]));
if (a[t].XH[g] == ' ')
break;
}
a[t].XH[g] = '\0';
scanf_s("%d", &(a[t].score));
getchar();
}
qsort(a, i, sizeof(struct infor), CMPSCORE);
for (g = 0; (g <=10); g++) {
if (a[i-1].name[g] == '\0')
break;
printf("%c", (a[i-1].name[g]));
}
printf(" ");
for (g = 0; g<=10; g++) {
if (a[i-1].XH[g] == '\0')
break;
printf("%c", (a[i-1].XH[g]));
}
printf("\n");
for (g = 0; g <= 10; g++) {
if (a[0].name[g] == '\0')
break;
printf("%c", (a[0].name[g]));
}
printf(" ");
puts(a[0].XH);
return 0;
}