C语言:将结构体存放到文件中

#include <stdio.h>
#include <stdlib.h>
#define MAXTLEN 70
#define MAXALEN 70
#define MAXBKS 10
struct book{
        char title[MAXTLEN];
        char author[MAXALEN];
        float value;
};

int main(){
        struct book library[MAXBKS];    //图书馆
        int count = 0, index, filecount;
        int size = sizeof(struct book); //这点值得注意
        FILE *pbooks;
        if((pbooks = fopen("book.dat","a+b")) == NULL){
                fputs("Can not open book.dat file\n", stderr);
                exit(1);
        }
        rewind(pbooks);
        while(count < MAXBKS && fread(&library[count],size,1,pbooks) == 1){
                if(count == 0){
                        puts("Current contents of book.dat: ");
                }
                printf("%s by %s: $%.2f\n",library[count].title,library[count].author,library[count].value);
                count++;
        }
        filecount = count;
        if(count == MAXBKS){
                fputs("The book.dat file is full",stderr);
                exit(2);
        }
        puts("please add the new book, title:");
        while(count < MAXBKS && gets(library[count].title) != NULL && library[count].title[0] != ‘\0‘){
                puts("the author:");
                gets(library[count].author);
                puts("the value:");
                scanf("%f",&library[count++].value);
                while(getchar() != ‘\n‘){
                        continue;
                }
                if(count < MAXBKS){
                        puts("---continue---");
                }
        }
        if(count > 0){
                puts("Here is the list of your books:");
                for(index = 0; index<count; index++){
                        printf("%s by %s: $%.2f\n",library[index].title,library[index].author,library[index].value);
                }
                fwrite(&library[filecount],size,count-filecount,pbooks);
        }else{
                puts("No books? Too bad\n");
        }
        puts("Bye\n");
        fclose(pbooks);
        return 0;
}
Current contents of book.dat:
C语言权威指南 by jimmy: $68.00
PHP项目大全 by jimmy: $99.90
please add the new book, title:
时间: 2024-10-12 06:40:10

C语言:将结构体存放到文件中的相关文章

读取文件中的数据(以结构体存放)

/* *读取文件中的数据(数据以结构体存放) */ #include<iostream> #include <fstream> //#define Field 31 //field_anal number #define Field 15 //field_post number using namespace std; //the level restore certain level data //level_z show the level struct Level { int

c语言 struct结构体的变量声明加冒号

有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1两种状态,用一位二进位即可. 为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为"位域"或"位段".所谓"位域"是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数.每个域有一个域名,允许在程序中按域名进行操作.这样就可以把几个不同的对象用一个字节的二进制位域来表示. [1]定义: struct 位域结构名 { 位

C语言的结构体和C++结构体的区别

关于C++中声明结构体中需要使用构造器创建实例对象的语法: 接着上两个代码截图你就初步体会到C语言的结构体和C++结构体的区别了:     对于右边的C++结构体的使用类似Java,C++,Swift中的类,类中有构造器方法,然后构造器创建这个类的实例对象. 当然Swift中也有一样用法的结构体.毕竟Swfit是集大家之所成的现代语言.

黑 马 程 序 员_视频学习总结&lt;C语言&gt;----05 结构体

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 一.什么是结构体 在实际应用中,我们通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名.年龄.身高等数据构成,这些数据都具有不同的类型,姓名可以是字符串类型,年龄可以是整型,身高可以是浮点型.为此,C语言专门提供了一种构造类型来解决上述问题,这就是结构体,它允许内部的元素是不同类型的. 二.结构体的定义 结构体内部的元素,也就是

c语言的结构体字节数统计

struct结构体的字节数 等于 结构体中最大类型的字节数的倍数. 如:?typedef struct Student{??? short id; //2个字节??? char name[15]; //1*15个字节??? int age; //4个字节??? char num; //1个字节} Student; 总共28个字节. c语言的结构体字节数统计

C语言的结构体和 C++结构体的区别

 C语言的结构体和 C++结构体的区别 关于C++中声明结构体中需要使用构造器创建实例对象的语法: <C++的结构体构造方法的基本概念:结构体的构造方法需要和结构体的名字相同,并且无返回值,也不要void关键字,这样的方法就是构造器的初始化方法> 接着下面两个代码截图(一个是C源码,一个是C++源码)对比你就初步体会到C语言的结构体和C++结构体的区别了:      对于右边的C++结构体的使用类似Java,C++,Swift中的类,类中有构造器方法,然后构造器创建这个类的实例对象. 当然Sw

C语言经典---结构体

结构体也属于构造类型.结构体比数组更加灵活,可以存放不同类型的变量 结构体是由若干组成员组成的,成员既可以是基本数据类型.又可以是构造类型,比如数组 结构体属于自定义数据类型 1.结构体声明: struct 结构体名 { 类型说明符  成员名; -; 类型说明符  成员名; };  //注意此处分号不能少. 结构体是自定义类型,结构体变量是由结构体类型修饰的变量. 定义结构体变量 struct 结构体名 变量名 = {初值} ; 结构体成员访问 结构体成员的表示形式 结构体变量,成员 typed

C语言之结构体

1 概述 结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型. 2 定义结构体类型变量的方法 定义结构体变量的一般格式为: struct 结构名 { 类型  变量名; 类型  变量名: ... }结构变量; 代码如下: struct Student{         char name[8];         int age;     }stu1; 上面的代码声明了一个名为Student的结构体,它包含两个成员name和age,成员name的数据类型为字符数组,成员ag

【剑仙教程】易语言的结构体。自定义数据类型。

1楼. [剑仙教程]易语言的结构体.自定义数据类型. 在易语言中,有基本数据类型,自定义数据类型. 自定义数据类型,在C语言/C++中称为结构体.这是面向对象和类的编程. . . 先上代码.打开易语言的IDE,IDE,是开发环境. 点击“插入”菜单,选择“数据类型” 这时,代码编辑框就会增加一个数据类型的窗口. 把“数据类型1”命名为“精易_座标”,勾选“公开项”. 这样,一个 精易_座标 的类就做好了. . 再按回车键,给这个类增加2个成员. x 整数型 y 整数型 . 访问时,直接写代码就O