为什么这个程序只能输入一组数据,且有很多乱码???

如题,十分感谢!#include<stdio.h>structstudent{intnum;charname[10];charsex;intage;floatgrade;... 如题,十分感谢!

#include<stdio.h>
struct student{
int num;
char name[10];
char sex;
int age;
float grade;
};
void read(struct student *x)
{
int i;
printf("Input number,name,sex,age and grade:\n");
for(i=0;i<5;i++,x++)
scanf("%d%s%c%d%f",&(*x).num,(*x).name,&(*x).sex,&(*x).age,&(*x).grade);
}
void sort(struct student *x)
{
struct student temp;
int i,j;
for(i=0;i<4;i++)
for(j=0;j<4-i;j++)
if(x[j].grade>x[j+1].grade){
temp=x[j];
x[j]=x[j+1];
x[j+1]=temp;
}
}
void print(struct student *x)
{
int i;
printf(" number name sex age grade\n");
for(i=0;i<10;i++,x++)
printf("%10d%10s%10c%10d%10f\n",x->num,x->name,x->sex,x->age,x->grade);
}
void main()
{
struct student s[5];
struct student *p=s;
read(p);
printf("Before transpos:\n");
print(p);
sort(p);
printf("After transpos:\n");
print(p);
}
展开
 我来答
633jx
2013-11-25 · 超过35用户采纳过TA的回答
知道答主
回答量:130
采纳率:0%
帮助的人:78.9万
展开全部
2处错误:
1)read():scanf("%d%s%c%d%f",&(*x).num,(*x).name,&(*x).sex,&(*x).age,&(*x).grade);改为scanf("%d%s %c%d%f",&(x->num),x->name,&(x->sex),&x->age,&x->grade);//注意%c前面的空格,输入数据的时候以空格分隔
2) print():for(i=0;i<10;i++,x++)改为for(i=0; i<5; i++,x++)
追问
能解释一下为什么%c前要加空格吗?我还是有点不太懂……谢谢!
追答
为了与前面的字符串分开。因为虽然空格、制表符和换行符都用做域分割符号,但读单字符操作中却按一般字符处理,若没有这个空格你将无法将字符与前面的字符串分开。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式