我要排出这个成绩表的名次,但是为什么会这样?

时间:2021-02-21 19:54:31
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
int main (int argc, char argv[])
{
int StudentScores[10][6];
char StudentName[10][20];
int Cur=0;
int Index=0;
FILE *fp=NULL;
fp = fopen("Scores.txt","rb");
if (fp==NULL)
return -1;
for(Cur=0; Cur<4;Cur++)
{
fscanf(fp,"%s\t%d\t%d\t%d\t%d\t%d\t%d",StudentName[Cur],&StudentScores[Cur][0],&StudentScores[Cur][1],
&StudentScores[Cur][2],&StudentScores[Cur][3],&StudentScores[Cur][4]);
//StudentScores[Cur][4]=(StudentScores[Cur][0]+StudentScores[Cur][1]+StudentScores[Cur][2])/3;
}
fclose(fp);
printf("姓名\t國文\t英文\t數學\t總分\t平均\t名次\r\n");

for(Cur=0;Cur<4;Cur++)
{
StudentScores[Cur][3]=StudentScores[Cur][0]+StudentScores[Cur][1]+StudentScores[Cur][2];
StudentScores[Cur][4]=(StudentScores[Cur][0]+StudentScores[Cur][1]+StudentScores[Cur][2])/3;
printf("%s\t%2d\t%2d\t%2d\t%d\t%d\t%d \r\n", StudentName[Cur],StudentScores[Cur][0],StudentScores[Cur][1],
StudentScores[Cur][2],StudentScores[Cur][3],StudentScores[Cur][4]);
}
//seqencing
int temp_Scores[6];
char temp_Name[20];
int i=0,j=0;
int value=0;
for(i=0; i<4;i++)
{
for(j=i+1; j<4;j++)
{
if(StudentScores[j][3]>StudentScores[i][3])
{
memcpy(temp_Scores,StudentScores[j],sizeof(temp_Scores));
memcpy(StudentScores[j],StudentScores[i],sizeof(temp_Scores));
memcpy(StudentScores[i],temp_Scores,sizeof(temp_Scores));

memcpy(temp_Name,StudentName[j],sizeof(temp_Name));
memcpy(StudentName[j],StudentName[i],sizeof(temp_Name));
memcpy(StudentName[i],temp_Name,sizeof(temp_Name));
}
}
}
printf("\r\n姓名\t國文\t英文\t數學\t總分\t平均\t名次\r\n");

for(Cur=0;Cur<4;Cur++)
{
//StudentScores[Cur][3]=StudentScores[Cur][0]+StudentScores[Cur][1]+StudentScores[Cur][2];
//StudentScores[Cur][4]=(StudentScores[Cur][0]+StudentScores[Cur][1]+StudentScores[Cur][2])/3;
printf("%s\t%2d\t%2d\t%2d\t%d\t%d\t%d \r\n", StudentName[Cur],StudentScores[Cur][0],StudentScores[Cur][1],
StudentScores[Cur][2],StudentScores[Cur][3],StudentScores[Cur][4]);
}
return 0;
}

10 个解决方案

#1


我要排出这个成绩表的名次,但是为什么会这样?

#2


麻烦楼主详细说下遇到的问题。
我觉得排序结果是正确的,没什么问题。

#3


代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

#4


printf("%s\t%2d\t%2d\t%2d\t%d\t%d\t%d \r\n", StudentName[Cur],StudentScores[Cur][0],StudentScores[Cur][1],
StudentScores[Cur][2],StudentScores[Cur][3],StudentScores[Cur][4], Cur);


打印时少了一个参数

#5


引用 2 楼 slx_391987 的回复:
麻烦楼主详细说下遇到的问题。
我觉得排序结果是正确的,没什么问题。

但是名次好像有点问题啊

#6


引用 4 楼 lovesmiles 的回复:
printf("%s\t%2d\t%2d\t%2d\t%d\t%d\t%d \r\n", StudentName[Cur],StudentScores[Cur][0],StudentScores[Cur][1],
StudentScores[Cur][2],StudentScores[Cur][3],StudentScores[Cur][4], Cur);


打印时少了一个参数

名次变这样也不对
我要排出这个成绩表的名次,但是为什么会这样?

#7


那就加1,自己改一下都不会?
printf("%s\t%2d\t%2d\t%2d\t%d\t%d\t%d \r\n", StudentName[Cur],StudentScores[Cur][0],StudentScores[Cur][1],
StudentScores[Cur][2],StudentScores[Cur][3],StudentScores[Cur][4], Cu+1r);

#8


引用 7 楼 lovesmiles 的回复:
那就加1,自己改一下都不会?
printf("%s\t%2d\t%2d\t%2d\t%d\t%d\t%d \r\n", StudentName[Cur],StudentScores[Cur][0],StudentScores[Cur][1],
StudentScores[Cur][2],StudentScores[Cur][3],StudentScores[Cur][4], Cu+1r);

不是,这两段表是一样的,上面一段是乱序同时把名称打出来;下面一段是把上面的排了名次和分数!!现在是要把下面的表顺序还原,名次也要正确的意思

#9


你的文件里面有没有名次这个数据,如果有,在输入时应该加上
fscanf(fp,"%s\t%d\t%d\t%d\t%d\t%d\t%d",StudentName[Cur],&StudentScores[Cur][0],&StudentScores[Cur][1],
&StudentScores[Cur][2],&StudentScores[Cur][3],&StudentScores[Cur][4],& StudentScores[Cur][5]);

打印时也加上
printf("%s\t%2d\t%2d\t%2d\t%d\t%d\t%d \r\n", StudentName[Cur],StudentScores[Cur][0],StudentScores[Cur][1],
StudentScores[Cur][2],StudentScores[Cur][3],StudentScores[Cur][4], StudentScores[Cur][5]);

#10


引用 9 楼 lovesmiles 的回复:
你的文件里面有没有名次这个数据,如果有,在输入时应该加上
fscanf(fp,"%s\t%d\t%d\t%d\t%d\t%d\t%d",StudentName[Cur],&StudentScores[Cur][0],&StudentScores[Cur][1],
&StudentScores[Cur][2],&StudentScores[Cur][3],&StudentScores[Cur][4],& StudentScores[Cur][5]);

打印时也加上
printf("%s\t%2d\t%2d\t%2d\t%d\t%d\t%d \r\n", StudentName[Cur],StudentScores[Cur][0],StudentScores[Cur][1],
StudentScores[Cur][2],StudentScores[Cur][3],StudentScores[Cur][4], StudentScores[Cur][5]);

如果没有就只有这样可以得出正确名次吗? 我要排出这个成绩表的名次,但是为什么会这样?
这是刚才的第一段表名次好像不行 我要排出这个成绩表的名次,但是为什么会这样?

#1


我要排出这个成绩表的名次,但是为什么会这样?

#2


麻烦楼主详细说下遇到的问题。
我觉得排序结果是正确的,没什么问题。

#3


代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

#4


printf("%s\t%2d\t%2d\t%2d\t%d\t%d\t%d \r\n", StudentName[Cur],StudentScores[Cur][0],StudentScores[Cur][1],
StudentScores[Cur][2],StudentScores[Cur][3],StudentScores[Cur][4], Cur);


打印时少了一个参数

#5


引用 2 楼 slx_391987 的回复:
麻烦楼主详细说下遇到的问题。
我觉得排序结果是正确的,没什么问题。

但是名次好像有点问题啊

#6


引用 4 楼 lovesmiles 的回复:
printf("%s\t%2d\t%2d\t%2d\t%d\t%d\t%d \r\n", StudentName[Cur],StudentScores[Cur][0],StudentScores[Cur][1],
StudentScores[Cur][2],StudentScores[Cur][3],StudentScores[Cur][4], Cur);


打印时少了一个参数

名次变这样也不对
我要排出这个成绩表的名次,但是为什么会这样?

#7


那就加1,自己改一下都不会?
printf("%s\t%2d\t%2d\t%2d\t%d\t%d\t%d \r\n", StudentName[Cur],StudentScores[Cur][0],StudentScores[Cur][1],
StudentScores[Cur][2],StudentScores[Cur][3],StudentScores[Cur][4], Cu+1r);

#8


引用 7 楼 lovesmiles 的回复:
那就加1,自己改一下都不会?
printf("%s\t%2d\t%2d\t%2d\t%d\t%d\t%d \r\n", StudentName[Cur],StudentScores[Cur][0],StudentScores[Cur][1],
StudentScores[Cur][2],StudentScores[Cur][3],StudentScores[Cur][4], Cu+1r);

不是,这两段表是一样的,上面一段是乱序同时把名称打出来;下面一段是把上面的排了名次和分数!!现在是要把下面的表顺序还原,名次也要正确的意思

#9


你的文件里面有没有名次这个数据,如果有,在输入时应该加上
fscanf(fp,"%s\t%d\t%d\t%d\t%d\t%d\t%d",StudentName[Cur],&StudentScores[Cur][0],&StudentScores[Cur][1],
&StudentScores[Cur][2],&StudentScores[Cur][3],&StudentScores[Cur][4],& StudentScores[Cur][5]);

打印时也加上
printf("%s\t%2d\t%2d\t%2d\t%d\t%d\t%d \r\n", StudentName[Cur],StudentScores[Cur][0],StudentScores[Cur][1],
StudentScores[Cur][2],StudentScores[Cur][3],StudentScores[Cur][4], StudentScores[Cur][5]);

#10


引用 9 楼 lovesmiles 的回复:
你的文件里面有没有名次这个数据,如果有,在输入时应该加上
fscanf(fp,"%s\t%d\t%d\t%d\t%d\t%d\t%d",StudentName[Cur],&StudentScores[Cur][0],&StudentScores[Cur][1],
&StudentScores[Cur][2],&StudentScores[Cur][3],&StudentScores[Cur][4],& StudentScores[Cur][5]);

打印时也加上
printf("%s\t%2d\t%2d\t%2d\t%d\t%d\t%d \r\n", StudentName[Cur],StudentScores[Cur][0],StudentScores[Cur][1],
StudentScores[Cur][2],StudentScores[Cur][3],StudentScores[Cur][4], StudentScores[Cur][5]);

如果没有就只有这样可以得出正确名次吗? 我要排出这个成绩表的名次,但是为什么会这样?
这是刚才的第一段表名次好像不行 我要排出这个成绩表的名次,但是为什么会这样?