长深高速咨询电话:求助!求助!一个简单的c语言问题

来源:百度文库 编辑:高校问答 时间:2024/04/28 00:28:38
#include"stdio.h"
struct student
{ int num;
char name[30];
char sex;
int age;
};
main()
{ struct student stu[10],*q;
int k;
for(k=0,q=stu;k<10;k++,q++)
{ printf("Please enter %d's student information: ",k+1);
scanf("%d%s%c%d\n",&q->num,q->name,&q->sex,&q->age);
}
printf("The result is:\n");
for(k=0,q=stu;k<10;k++,q++)
printf("%d %s %c %d\n",q->num,q->name,q->sex,q->age);
}
程序运行通,但取得姓名那一步有问题,下面这个程序也是,小弟觉得这两个问题很相似,哪位仁兄能帮一把,并告知小弟原因,不胜感谢~!
#include"stdio.h"
main()
{ struct student
{ char *name;
float math,physics,language;
}student[3];
int j,sum[3];
printf("Please enter student data:\n");
for(j=0;j<3;j++)
{ printf("name:");
scanf("%s",student[j].name);
printf("math:");
scanf("%f",&student[j].math);
printf("physics:");
scanf("%f",&student[j].physics);
printf("language:");
scanf("%f",&student[j].language);
}
for(j=0;j<3;j++)
sum[j]=student[j].math+student[j].physics+student[j].language;
for(j=0;j<3;j++)
printf("%s\t%5.2f\n",student[j].name,sum[j]);
}

首先感谢各位仁兄 不过问题还是没有解决。你们说的每种方案我都在程序里做了试验。
scanf("%d%s%c%d\n",&(q->num),(q->name),&(q->sex),&(q->age)); 不行
-〉的优先级比&高,书上写的!
q->name,数组名就是地址,不用加&
name[30]前面也不用加* 如果加*可以直接写成*name

希望各位仁兄把程序复制下来在tc环境下运行看看 问题确实出在
scanf("%d%s%c%d\n",&q->num,q->name,&q->sex,&q->age);中的
name和%s上,我觉得是输入的name在数组中没有'\0',可是我不知道应该咋加。

再一次麻烦各位仁兄!!

这个好像是name[30]的类型char不对,后面那个我没看,前面这个我在结构中的name前面加上*就ok了。

scanf("%d%s%c%d\n",&q->num,q->name,&q->sex,&q->age);
看见这一行了吗?
q->name的前面少了个 & 啊!!!
不要粗心哦!

在scanf里面要加&取地址。
结构体里面的name和其他成员一样,在你这种用法中需要加&
提醒一句,您这程序最好有些字符合法性判断。

scanf("%d%s%c%d\n",&q->num,q->name,&q->sex,&q->age); 问题应该还是这一行,但不是上一位仁兄说的那样。q->name本来就是指针,根本不用加&的。你应该这样写:scanf("%d%s%c%d\n",&(q->num),(q->name),&(q->sex),&(q->age)); 这是个优先级问题。