C语言难题?

在某次大学生演讲比赛中,有N名选手,每名选手的信息包括:编号、姓名、得分。编写一个程序,首先定义一个结构体数组记录选手信息(选手信息从键盘输入),然后将该结构体数组信息保... 在某次大学生演讲比赛中,有N名选手,每名选手的信息包括:编号、姓名、得分。编写一个程序,首先定义一个结构体数组记录选手信息(选手信息从键盘输入),然后将该结构体数组信息保存至一个文本文件中(文件命名规则同实验1,每行存储一名选手信息,空格分隔)。提示:使用fwrite函数实现。
形如:
展开
 我来答
小瓜瓜的大店
2019-06-07 · 生命似一部小说,其价值在于贡献而不在短长
小瓜瓜的大店
采纳数:16 获赞数:57

向TA提问 私信TA
展开全部
typedef struct stu{
char * name,gender;
int score;
}STU;

void f(char *p)
{
//p=(char *)malloc(10);
strcpy(p,"Qian");
}

int main(void)
{
STU a={NULL,'m',290},b;
a.name=(char *)malloc(10);
strcpy(a.name,"Zhao");
b = a;
f(b.name);
b.gender ='f';
b.score =350;
printf("%s,%c,%d

\n",a.name,a.gender,a.score);
printf("%s,%c,%d

\n",b.name,b.gender,b.score);
return 0;
}

为啥注释掉了以后的答案变成:Qian,m,290,Qian,f,

350,?
而不注释掉答案却是: Zhao,m,290,Zhao

,f,350?

你的目的是通过函数去修改另外一个结构体对象b中成员name

的值。
观察到成员中的gender和score基本上没有什么值得研究 ,

所以只研究第一个成员name。

在你执行了代码b=a的时候,b和a分别在内存条上占用

sizeof(stu)的空间大小。而且,这两个空间中的值都是一

模一样的。
当你执行了函数f()的时候,分两种情况。
第一没有注释:函数f会在栈上分配4个字节的内存(sizeof

(char*),因为p的类型就是char*)。那么p的值就是等于

b.name。
b.name的值我们假设是0x1234567,那么现在p的值也就是

0x1234567。没有注释的情况下,p的值马上被修改成malloc

的返回值,所以现在p的值一定不是0x1234567。
假如malloc的返回值是0x7654321,那么现在p的值也就是

0x7654321。你使用了strcpy,那么0x7654321首地址开始的

内容就变成了zhao。
所以,你没有改变0x1234567所指向的内容。结果就是

0x1234567指向的内容还是为zhao。

第二有注释:函数f会在栈上分配4个字节的内存(sizeof

(char*),因为p的类型就是char*)。那么p的值就是等于

b.name。
b.name的值我们假设是0x1234567,那么现在p的值也就是

0x1234567。有注释的时候。p的值没有被malloc改变,还是

0x1234567.你使用了strcpy,就修改了0x1234567所指向的

内存。
最开始的内存中值是zhao,你修改后就变成了qian.

你的这个例子错误很多,但是基于你是实验的目的,我就不指

正了。针对不注释的情况,如果你要改变的话,我认为比较正

确的做法应该是这样的。

typedef struct stu{
char * name,gender;
int score;
}STU;

void f(char **p)
{
*p=(char *)malloc(10);
strcpy(*p,"Qian");
}

int main(void)
{
STU a={NULL,'m',290},b;
a.name=(char *)malloc(10);
strcpy(a.name,"Zhao");
b = a;
f(&b.name);
free(a.name);
a.name=NULL:
return 0;
}
福美郯韫素
2020-04-13 · TA获得超过1085个赞
知道小有建树答主
回答量:2439
采纳率:100%
帮助的人:12.8万
展开全部
首先用二进制创建打开一个文件"data.dat",用于写,在当前目录
循环6次,每次都从文件头写一个整型数据,最后写的数据是a[0]中存放的整数1
回到文件头再回读一个整型数据到k
关闭文件
打印k的值,由于上边写的时候都回到文件头,所以后一个写将会冲掉前一个写的值,只有最后一次写的存放在文件头,因此k的值是1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
火长一灬东8200
2019-06-06 · TA获得超过1864个赞
知道小有建树答主
回答量:2737
采纳率:0%
帮助的人:242万
展开全部
思路是这样的,在不超过瓶口的时候,奇数分钟时高度加u,偶数分钟时高度减d
int run(float n,float u,float d)
{
float high=0;
int time=0;
while(high<n)
{
time++;
if(time%2==1)
high=high+u;
else
high-=d;
}
return time;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
蔺谷冼饮月
2019-12-17 · TA获得超过1127个赞
知道答主
回答量:7
采纳率:0%
帮助的人:575
展开全部
数据结构里的问题,要用到2叉树和栈这种结构,和树的遍历,属于中缀表达式求解算术运算
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
九问束暖姝
2020-03-24 · TA获得超过1183个赞
知道小有建树答主
回答量:2360
采纳率:95%
帮助的人:13.5万
展开全部
应该加{},否则最后一个else是没有配对if的,这样就会报错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式