C语言怎么存链表形式的结构体文件?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言怎么存链表形式的结构体文件?相关的知识,希望对你有一定的参考价值。
struct Client
char Name[10];
int Sex;
int Age;
char IDcard[18];
int day;
int date;
int date2;
char Tel[11];
long Price;
Clientlist[2];
struct room
int RoomID;
int Sign;
struct Client Clientlist[2];
struct room*next;
Room[NUM];这是结构体的代码。
void save()
struct room*head;
FILE*fp=fopen("date.txt","wb");
struct room*p=head;
while(p!=NULL)
fwrite(p,sizeof(struct room),NUM,fp);
p=p->next;
fclose(fp);
这是文件存储代码请大佬指点哪里错了
fwrite(p,sizeof(struct room),1,fp); //每次写入一个节点追问
NUM改成1也一样运行不了啊...
追答哦,save函数里纯粹没有链表存在啊,你要传递链表给save,head是是传递进来的
void save(struct room*head) //传递
FILE*fp=fopen("date.txt","wb");
struct room*p=head;
while(p!=NULL)
fwrite(p,sizeof(struct room),1,fp);
p=p->next;
fclose(fp);
大体是这样的:
int main()
.........//建立链表
save(head); //传递链表给save函数
怎样建立链表呢,入门学者有点不会
参考技术B struct room* p = head;head是空指针,换成实际的头指针
fwrite(p, sizeof(struct room), NUM, fp);
p指针一次只指向一个room,改成fwrite(p, sizeof(struct room), 1, fp);
写入的是二进制文件,最好装个类似如winhex的软件,方便查看实际生成的文件是否符合需要追问
怎么换成实际的头指针?
追答你总得先生成链表吧,没有链表哪来的头指针
追问大佬麻烦教一下呗怎么生成链表
C语言结构体和共用体_07
- 概述
- 定义结构体类型变量的方法
- 结构体变量的引用
- 结构体变量的初始化
- 结构体数组
- 指向结构体类型数据的指针
- 用指针处理链表
- 共用体
- 枚举类型
- 用 typedef定义类型
概述
定义一个结构体的一般形式:
struct 结构名 { 成员列表 };
一个结构体有一个结构名,但不是必须的。成员列表有若干个成员组成,每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为: 类型说明符 成员名;
例如:
// 学号、姓名、性别、年龄、地址等属性 struct Student { int num; char name[20]; char sex; int age; char addr[30]; };
定义结构体类型变量的方法
在定义了结构体变量后,系统会位置分配内存单元。
可以采用三种方法定义结构体类型变量:
1)先声明结构体类型再定义变量名;
struct Student person1; struct Student person2;
则,person1、person2 具有struct Student类型的结构。
2)在声明类型的同时定义变量
struct Student { int num; char name[20]; char sex; int age; char addr[30]; } student1, student2;
3)直接定义结构体类型变量,即不出现结构体名
struct { int num; char name[20]; char sex; int age; char addr[30]; } student1;
结构体可以嵌套:例如:
struct date { int month; int day; int year; }; struct Student { int num; char name[20]; char sex; int age; char addr[30]; struct date birthday; // date结构体 };
结构体变量的引用
在定义了结构体变量以后,若要引用这个变量,必须遵守以下规则:
1)不能将一个结构体变量作为一个整体进行输入和输出。
正确引用方法:结构体变量名.成员名
示例:
printf("\\n%d\\n%s\\n%c\\n%d\\n%d\\n%d\\n%.2f\\n", student1.num, student1.name, student1.sex, student1.birthday.year, student1.birthday.month, student1.birthday.day, student1.score);
student1.num = 100;
"."是成员(分量)运算符,它在所有的运算符中优先级最高。因此可以把student1.num等作为一个整体来看待。上面赋值语句的作用是将整数100赋给student1变量中的成员num。
struct Student student1 = {21, "Kingdev", \'f\', {2016, 3, 28}, 90.f}; struct Student student2 = {10, "Learning", \'m\', {2010, 10, 10}, 80.f}; student1 = student2; // 整体赋值 printf("\\n%d\\n%s\\n%c\\n%d\\n%d\\n%d\\n%.2f\\n", student1.num, student1.name, student1.sex, student1.birthday.year, student1.birthday.month, student1.birthday.day, student1.score);
打印出的结果为变量 student2 的值。
2)如果成员本身又属于一个结构体类型,则要用若干个成员运算符一级一级的找到最低的一级的成员。只能对最低级的成员进行赋值或存取以及运算。如:
student1.birthday.year, student1.birthday.month, student1.birthday.day
3)对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)
如:
// 计算两位学生的分数和 float sum = student1.score + student2.score;
4)可以引用结构体变量成员的地址,也可以引用结构体变量的地址;
结构体地址和结构体第一个元素地址是一致的。结构体变量的地址主要用作函数的参数,传递结构体变量的地址。
printf("student1 Address - %p\\n", &student1); printf("student1 first Ele - %p\\n", &student1.num); // 打印结果 student1 Address - 0x7fff5fbff7b0 student1 first Ele - 0x7fff5fbff7b0
结构体变量的初始化
尊重作者劳动成果,转载请注明: 【kingdev】
以上是关于C语言怎么存链表形式的结构体文件?的主要内容,如果未能解决你的问题,请参考以下文章