急 程序问题

来源:百度知道 编辑:UC知道 时间:2024/06/07 21:07:09
下面的程序为什么输出的姓名不对应

#include<stdio.h>
#include<string.h>
struct student
{
int num;
char name[20];
float score;
};
struct student stu[10];
void main()
{

int i,j;
float t;
printf("请输入学号姓名成绩\n");
for(i=0;i<10;i++)
scanf("%d%s%f",&stu[i].num,stu[i].name,&stu[i].score);
for(i=0;i<10;i++)
for(j=i+1;j<10;j++)
if(stu[i].score<stu[j].score)
{
t=stu[i].score;
stu[i].score=stu[j].score;
stu[j].score=t;
}
for(i=0;i<10;i++)
{
printf("第%d名",i+1);
printf("%d%s%f",stu[i].num,stu[i].name,stu[i].score);
printf("\n");}
}

在交换的时候应把整个结构体都交换,不能只换一个元素,另外,编程的时候最好把输出格式调的好一些,这样有助于调试,也要注意编程风格
改好的程序
#include<stdio.h>
#include<string.h>
struct student
{
int num;
char name[20];
float score;
};

void main()
{
student stu[10];
int i,j;
int temp_num;
float t;
char name[100];
printf("请输入学号姓名成绩\n");
for(i=0;i<10;i++)
scanf("%d%s%f",&(stu[i].num),stu[i].name,&(stu[i].score));
for(i=0;i<10;i++)
for(j=i+1;j<10;j++)
if(stu[i].score<stu[j].score)
{
strcpy(name,stu[i].name);
temp_num=stu[i].num;
t=stu[i].score;

strcpy(stu[i].name,stu[j].name);
stu[i].num=stu[j].num;
stu[i].score=stu[j].score;

strcpy(stu[j].name,name);
stu[j].num=temp_num;
stu[j].score=t;

}
for(i=0;i<10;i++)
{
printf("第%d名",i+1);
printf("%d%s%f",stu[i].nu