C语言 fwrite函数

发布网友 发布时间:2022-04-26 23:35

我来回答

4个回答

热心网友 时间:2022-06-20 05:49

scanf("%1d,%s,%d,%f",&tea[i].num,tea[i].name,&tea[i].age,&tea[i].salary);要求输入的格式是用逗号分隔的,所以,你要console输入要使用逗号分隔符。
在控制台输入 1,aaa,24,3000回车。
scanf的第一个参数是格式化字符串,后面是可变长参数列表,要求是指针类型,tea[i].name代表tea数组的第i个元素中的name,name会从char[]类型隐式转型为char *,也就是字符数组首地址。
所以不需要取地址&。
fwrite是向文件中写入你之前输入的内容,该内容是二进制的,因为你打开的时候是用的wb,w是写的意思,b是binary的意思。你向文件中写入了这个结构体二进制数据。&tea[i]就是tea[i]的地址,sizeof(struct teacher)返回结构体teacher的大小。追问scanf("%1d,%s,%d,%f",&tea[i].num,tea[i].name,&tea[i].age,&tea[i].salary);
可以换成
scanf("%1d,%s,%d,%f",&num,name,&age,salary);吗?

追答不可以。tea[i]是一个teacher对象。你这样写必须要先定义num,name,age,salary这四个变量,然后还要将其拷贝到tea[i]中。
像这样。
int num;char name[20];int age;float salary;
scanf("%1d,%s,%d,%f" , &num , name , &age , &salary);
tea[i].num = num;
strcpy(tea[i].name , name);
tea[i].age = age;
tea[i].salary = salary;

热心网友 时间:2022-06-20 05:49

编译没错,运行的时候有错,出现很多烫 ////数组没初始化
&tea[i].num ////自定义的结构体变量意思可以自己定 大概是学号的意思
tea[i].name //// 自定义的结构体变量意思可以自己定 大概是名字的意思
&tea[i].age ////自定义的结构体变量意思可以自己定 大概是年龄的意思
&tea[i].salary /////自定义的结构体变量意思可以自己定
为什么tea[i].name前面没有&? ///// 因为这是个数组,tea[i].name本身就是个地址
&tea[i]/////表示结构体数组的第i个
sizeof(struct teacher) ////表示这个结构体的大小

热心网友 时间:2022-06-20 05:50

你好!!
程序没什么问题,就是应该注意输入格式:每个内容之间逗号隔开
scanf("%1d,%s,%d,%f",&tea[i].num,tea[i].name,&tea[i].age,&tea[i].salary);

%1d ,这里限定了输入的位数,只能输入一个数字,否则出错

热心网友 时间:2022-06-20 05:50

就我所知道告诉你吧。
&tea[i].num----结构体中的变量。
tea[i].name---结构体中的变量 因为name是数组,可以用数组名当地址用。其余的不行。
&tea[i].age---结构体中的变量。
&tea[i].salary----结构体中的变量。

&tea[i]--结构体数组中第i个结构体的地址。

sizeof(struct teacher)---求一个struct teacher结构体的字节大小。追问scanf("%1d,%s,%d,%f",&tea[i].num,tea[i].name,&tea[i].age,&tea[i].salary);
可以换成
scanf("%1d,%s,%d,%f",&num,name,&age,salary);吗?

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com