c 结构体读取与保存

1.结构体保存到文本

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #define max 3
 5
 6 typedef struct student{
 7    char name[10];  //最好用数组,方便,用指针到时写入到文本不好操作
 8    int age;
 9    int score;
10 }STU;
11 int size = sizeof(STU);
12 void write(STU *);
13 void input(STU *);
14 void output(STU *);
15 //void clean(STU *);
16
17 void main(void)
18 {
19   STU kang[max];
20   input(kang);
21   output(kang);
22   write(kang);
23   clean(kang);
24 }
25
26 void input(STU * student)
27 {
28    char temp[10];
29    int i=0;
30    while(i<max && fgets(temp,sizeof(temp),stdin)!=NULL && temp[0]!=‘\0‘  )
31    {
32       //student->name = (char *) malloc(strlen(temp)+1);
33       strcpy(student->name,temp);
34       puts("age ?");
35       scanf("%d",&student->age);
36       puts("score ?");
37       scanf("%d",&student->score);
38
39       while(getchar() != ‘\n‘)
40          continue;
41
42       student++;
43       i++;
44       if(i<max)
45         puts("next name");
46    }
47
48 }
49
50 void output(STU * student)
51 {
52    int i=0;
53    while(i<max)
54    {
55       printf("%d---%s---%d---%d\n",i,student->name,student->age,student->score);
56       i++;
57       student++;
58    }
59
60 }
61
62 void write(STU * student)
63 {
64     FILE *fp;
65     int i=0;
66     if( (fp=fopen("data.txt","w+b")) == NULL )
67     {
68       puts("open error");
69     }
70
71     while(i<max)
72     {
73        fwrite(student,size,1,fp);
74        i++;student++;
75     }
76
77    fclose(fp);
78
79 }
80
81 void clean(STU * student)
82 {
83   int i=0;
84   while(i<max)
85   {
86     free(student->name);
87     i++;
88     student++;
89   }
90 }

2.读取结构体

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #define max 3
 4
 5 typedef struct student{
 6    char name[10];
 7    int age;
 8    int score;
 9 }STU;
10 int size = sizeof(STU);
11 void read(STU *);
12
13 void main(void)
14 {
15    STU kang[max];
16    read(kang);
17
18    int i=0;
19    while(i<max)
20    {
21      printf("%s---%d---%d\n",kang[i].name,kang[i].age,kang[i].score);
22      i++;
23    }
24
25 }
26
27
28 void read(STU * student)
29 {
30     FILE *fp;
31     int i=0;
32     if( (fp=fopen("data.txt","a+b")) == NULL )
33     {
34       puts("open error");
35       exit(1);
36     }
37     rewind(fp);
38    while(i<max)
39    {
40      fread(student,size,1,fp);
41      student++;i++;
42    }
43
44    fclose(fp);
45
46 }
时间: 2024-10-17 21:38:44

c 结构体读取与保存的相关文章

用结构体读取文件

#include<stdio.h>#include<stdlib.h>#include<string.h> int main(void){ struct data { char id[20]; char name[20]; char sex[10]; int old; char number[20]; char habit[10]; char b[10]; int piao; } student[10]; FILE *fp; if((fp=fopen("shi

Runtime的初步认识——结构体与类

Runtime的初步认识 Runtime的初步认识 Runtime介绍 类与结构体的关系 结构体解析 结构体的作用 Runtime介绍 学习一个东西至少要先知道它是个啥,你一定听说过"运行时是 Objective-C 的一个特色",这里的"运行时"就是指 runtime 了. runtime是在自 iOS 平台开放并基于 Objective-C 语言开发后的一个编程语言上的高级技术. 学习runtime的目的并不是为了开发,而是让你更好的理解 Objective-C

结构体指针概要

结构体指针 指针当做函数参数 数组当做函数参数 1.结构体指针 指向结构体变量的指针.称为结构体指针 Student stu ={0}; Student *p = &stu; Student  * 结构体指针类型(类型), p结构体指针变量(变量名); &stu 结构体变量地址(初值) (*p).sex = 'm'; p->sex= 'm'; (*p)对指针取值后是结构体变量,.sex是访问成员变量 使用指针可以指向操作符直接访问结构体成员p->sex 1.结构体指针 结构体指

你好,C++(14)如何描述“一个名叫陈良乔,年龄33岁,身高173厘米,体重61.5千克的男人”——3.8 用结构体类型描述复杂的事物

3.8  用结构体类型描述复杂的事物 利用C++本身所提供的基本数据类型所定义的变量,只能表达一些简单的事物.比如我们可以用int类型定义nAge变量表示人的年龄,用string类型定义strName变量表示人的姓名.然而,现实世界是复杂的,仅仅使用基本数据类型是不足以描述这个复杂的现实世界的.例如,我们无法使用某个基本数据类型来描述人这个复杂事物,因为他不仅有姓名,还有身高.年龄和性别等属性需要描述.但是我们注意到,再复杂的事物也是由简单事物组成的.既然我们能用基本数据类型来描述简单事物,那么

JNI——结构体(即java中的类)的传入与设置——NativeMethod映射表

参考:http://www.cnblogs.com/skywang12345/archive/2013/05/26/3093593.html java 类: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 package com.skywang.ndk; public class MyInfo {     private String  mName;                        

(转载)你好,C++(14)如何描述“一个名叫陈良乔,年龄33岁,身高173厘米,体重61.5千克的男人”——3.8 用结构体类型描述复杂的事物

你好,C++(14)如何描述“一个名叫陈良乔,年龄33岁,身高173厘米,体重61.5千克的男人”——3.8 用结构体类型描述复杂的事物 3.8  用结构体类型描述复杂的事物 利用C++本身所提供的基本数据类型所定义的变量,只能表达一些简单的事物.比如我们可以用int类型定义nAge变量表示人的年龄,用string类型定义strName变量表示人的姓名.然而,现实世界是复杂的,仅仅使用基本数据类型是不足以描述这个复杂的现实世界的.例如,我们无法使用某个基本数据类型来描述人这个复杂事物,因为他不仅

qsettings 保存自定义结构体(QVariant与自定义结构体相互转化)

参考博文:QVariant与自定义数据类型转换的方法. 这里摘取其关键内容: 1.将自定义数据类型使用Q_DECLARE_METATYPE宏进行声明,便于编译器识别. 2.在插入对象的时候,声明QVariant对象,使用其setValue方法添加自定义对象. 3.在读取的时候,采用QVariant对象的value方法返回自定义对象. 写入: //类型转换 QVariant v; v.setValue(MyStruct);  读取: //转换为自定义的结构体实例 MyStruct s = v.va

字节序转换与结构体位域(bit field)值的读取

最近又遇到了几年前遇到的问题,标记一下. 对于跨字节位域(bit field)而言,如果数据传输前后环境的字节序不同(LE->BE,BE->LE),简单地调用(ntohs/ntohl/htons/htonl)并不能正确读取位域的值. 例如: struct _exam_ { unsigned int tag : 6; unsigned int field1 : 3; unsigned int field2 : 7; unsigned int field3 : 11; unsigned int p

字节序转换与结构体位域(bit field)值的读取 Part 2 - 深入理解字节序和结构体位域存储方式

上一篇文章讲解了带位域的结构体,在从大端机(Big Endian)传输到小端机(Little Endian)后如何解析位域值.下面继续深入详解字节序,以及位域存储的方式. (1) 我们知道,存储数字时,对小端机而言,数字的低位,存在低地址,高位存在高地址.大端机正相反. (2) 读取的方式,也是一样的.对于小端机,读出的低地址位作为数字的低位. (3) 此外Big-Endian/Little-Endian存储顺序,不仅仅针对字节,还针对字节内的比特位.对于小端机而言,字节内的8个比特,低地址端比