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

#include<stdio.h>#include<string.h>structStudent{//intStudent_ID;charname[12];intscor... #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]; } } } } 展开
 我来答
帐号已注销
2017-12-29 · TA获得超过197个赞
知道小有建树答主
回答量:271
采纳率:68%
帮助的人:123万
展开全部
#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;
}
}
风若远去何人留
2017-12-29 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450096
专业C/C++软件开发

向TA提问 私信TA
展开全部

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]
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式