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