c语言 结构体 字符串输入输出

这个程序用来录入职员信息,因为姓名中间有空格,所以用gets函数赋给结构体里面的字符串,可是执行的时候虽然*p->name是指向了姓名字符串的首位置,但p->name一直... 这个程序用来录入职员信息,因为姓名中间有空格,所以用gets函数赋给结构体里面的字符串,可是执行的时候虽然*p->name是指向了姓名字符串的首位置,但p->name一直是NULL,而且向文件中写的时候也无法写入。除了p->name之外其他的都正常录入写入。
为什么会这样呢?应该怎样修改才可以还是用struct里面的name字符串啊?
#include<stdio.h>
struct student
{
char name[16],gen;
int empNo;
float hour,rate;
}*p;
void main()
{
int i;
float link=1.0;
char c,n[16];
FILE *fp;
fp=fopen("wagess.inf","w");
if(!fp)
printf("\nError");
scanf("%f",&link);
for(i=0;i<1;i++)
{
printf("Input the %dth person's statistics:\n",i+1);
c=getchar(); //接收上一个‘\n’
gets(p->name); //运行到这里 *p->name='G' 但p->name=NULL 为什么啊?
printf("EmployNo. Gender Rate Hour");
scanf("%d %c%f%f",&p->empNo,&p->gen,&p->rate,&p->hour);
fprintf(fp,"%-15s%d %c %-5.2f %-4.1f\n",p->name,p->empNo,p->gen,p->rate,p->hour);
}
fclose(fp);
}
展开
 我来答
猪头或火宝宝
推荐于2016-06-18 · TA获得超过2758个赞
知道小有建树答主
回答量:1001
采纳率:0%
帮助的人:1514万
展开全部
楼至你好!!!

其实我们在声明任何指针变量的时候,只是告诉编译器它的类型,名字。并不为其分配空间。

楼主定义全局结构体指针变量p,但没有为其分配空间,就用到了p->name,当然就会出错。

只需要在main()函数的开头为其分配空间即可。例如:
p=(struct student*)malloc(sizeof(struct student));
yjmsir
2010-07-31 · 贡献了超过124个回答
知道答主
回答量:124
采纳率:0%
帮助的人:38.2万
展开全部
改成如下,已经调试过了。
#include<stdio.h>
struct student
{
char name[16],gen;
int empNo;
float hour,rate;
};
void main()
{
student abc,*p;
*p=abc;
int i;
float link=1.0;
char c,n[16];
FILE *fp;
fp=fopen("wagess.inf","w");
if(!fp)
printf("\nError");
scanf("%f",&link);
for(i=0;i<1;i++)
{
printf("Input the %dth person's statistics:\n",i+1);
c=getchar(); //接收上一个‘\n’
gets(p->name); //运行到这里 *p->name='G' 但p->name=NULL 为什么啊?
printf("EmployNo. Gender Rate Hour\n");
scanf("%d %c%f%f",&p->empNo,&p->gen,&p->rate,&p->hour);
fprintf(fp,"%-15s%d %c %-5.2f %-4.1f\n",p->name,p->empNo,p->gen,p->rate,p->hour);
}
fclose(fp);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
岑开bo
推荐于2018-05-07
知道答主
回答量:15
采纳率:0%
帮助的人:7.5万
展开全部
程序中定义了一个全局结构体指针变量,但是程序体中并没有对这个指针申请空间,我想是这个错误。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式