pat A1025题报错warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attrib...

错误分析:没有仔细阅读题目,导致输出的结果各个参数的顺序不对,导致pat的报错原因。

收获;要熟读题目不能将计算机想象成人一样具有能自动识别的能力。

错误原因 将printf("%d %d %d\n",r,stu[i].local_number,stu[i].local_rank);中的stu[i].local_number和stu[i].local_rank的位置上搞反了,改为printf("%d %d %d\n",r,stu[i].local_number,stu[i].local_rank);后问题解决。
pat A1025题报错warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attrib..._第1张图片

完整的程序是:
//需求分析:首先定义一个学生机构体,这个结构体里包括准考证号、考场号、成绩、总成绩排名,考场成绩排名

//编写一个对比函数cmp对比两学生的成绩,如果成绩一样则让准考证号小的在上边

//按照考场输入考生成绩以及信息,每个考场排序一次。将须有考场循环一遍

//最后用sort函数排序所有的考生成绩

#include

#include

#include

using namespace std;

struct student

{

char id[15];

int score;

int local_rank;

int local_number;

}stu[30010];

bool cmp(student a,student b)

{

if (a.score!=b.score) return a.score>b.score;

else return strcmp(a.id,b.id)<0;

}

int main()

{ int n,k,num=0;

scanf("%d",&n);//考场数

for (int i = 1; i <= n; i++)

{

scanf("%d",&k);

for (int j = 0; j < k; j++)

{

scanf("%s %d",stu[num].id,&stu[num].score);

stu[num].local_number=i;

num++;

}

sort(stu+num-k,stu+num,cmp);

stu[num-k].local_rank=1;

for (int x= num-k+1; x < num; x++)//让该考场的第二位到最后一位分数相同者拥有相同的考场排名,

{

if (stu[x].score==stu[x-1].score)

{

stu[x].local_rank=stu[x-1].local_rank;

}

else

{

stu[x].local_rank=x+1-(num-k);

}

}

}

printf("%d\n",num);

sort(stu,stu+num,cmp);

int r=1;

for (int i = 0; i < num; i++)//让该考场的第二位到最后一位分数相同者拥有相同的考场排名,

{

if (i>0&&stu[i].score!=stu[i-1].score)

{

r=i+1;

}

printf("%s ", stu[i].id);

printf("%d %d %d\n",r,stu[i].local_number,stu[i].local_rank);

}

return 0;

}

解决问题时参考的网站https://blog.csdn.net/pihe7623/article/details/79679264

你可能感兴趣的:(pat,算法笔记)