c语言 结构体问题,第一个printf执行之后就程序崩溃了,把错误指出并改正,然后发源代码即可谢谢

#include<stdio.h>#include<string.h>struct Student{// int Student_ID; char name[12]; int score;};int main(void){ int i,j; struct Student s[10]; void sort(struct Student *p); for(i=0;i<10;i++)//输入信息 { printf("请输入第%d位学生的学号:",i+1); scanf("%d",s[i].Student_ID); printf("他\她的姓名:",i+1); j=0;while((s[i].name[j]=getchar())!='\n')j++; s[i].name[12]='\0'; printf("成绩:",i+1); scanf("%d",s[i].score); } for(i=0;i<10;i++)printf("%-6d%s%-6d",s[i].Student_ID,s[i].name[12],s[i].score);}void sort(struct Student *p)//升序排序{ int i,j; struct Student temp; temp=p[0]; for(i=0;i<10;i++) { for(j=i;j<10;j++) { if(p->score<p->score) { temp=p; p[j]=p[j+1]; p[j+1]=p[j]; } } } }

#include<stdio.h>
#include<string.h>
struct Student{
int Student_ID;
char name[12];
int score;
};

int main(void){
int i,j;
struct Student s[10];
void sort(struct Student *p);
for(i=0;i<10;i++){
printf("请输入第%d位学生的学号:\n",i+1);
scanf("%d",&s[i].Student_ID);//这里接收标准输入要取地址

while(getchar()!='\n');//这里释放掉输入学号带来的冗余字符。
printf("请输入第%d位学生的姓名:\n",i+1);
j=0;
while((s[i].name[j]=getchar())!='\n')
j++;
s[i].name[j]='\0';//这里溢出了。设置最后一位是'\0'就可以了。
printf("请输入第%d位学生的成绩:\n",i+1);
scanf("%d",&s[i].score);//这里接收标准输入要取地址
}
sort(s);//你要排序啊,不然题目白做了。
for(i=0;i<10;i++)
printf("%-6d%s\t%-6d\n",s[i].Student_ID,s[i].name,s[i].score);//字符串输出用指针,然后格式弄好一点
return 0;
}

void sort(struct Student *p){//题目要求选择排序 代码逻辑自己研究
int i,j,flag;
struct Student temp;
for(i=0;i<10;i++){
flag = i;
temp=p[i];
for(j=i+1;j<10;j++){
if(p[j].score<p[i].score){
flag = j;
}
}
temp=p[flag];
p[flag]=p[i];
p[i]=temp;
}
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-12-29

scanf需要传地址. 

见注释

int main(void)
{
    int i,j;
    struct Student s[10];
    void sort(struct Student *p);

    for(i=0;i<10;i++)//输入信息
    {
        printf("请输入第%d位学生的学号:",i+1);
        scanf("%d",&s[i].Student_ID);//add & to get addr

        printf("他\她的姓名:",i+1);
        j=0;
        while((s[i].name[j]=getchar())!='\n')j++;
        s[i].name[j]='\0';//j

        printf("成绩:",i+1);
        scanf("%d",&s[i].score);//add &, same.
    }

    for(i=0;i<10;i++)printf("%-6d%s%-6d",s[i].Student_ID,s[i].name,s[i].score);//use name. but not name[12]
}

相似回答