file.c
#include<stdio.h>int main(int argc, const char *argv){ int num; int i1 = scanf("%i", &num); int i2 = PRintf("%d/n", num); printf("%d:%d/n", i1, i2); return 0;}文本:
优势:方便人类读写,而且跨平台劣势:程序输入输出要经过格式化,开销大二进制
优势:程序读写快劣势:人类读写困难,不能跨平台 int的大小不一致,大小端的问题student.h
#ifndef _STUDENT_H_#define _STUDENT_H_typedef struct _student{ char name[20]; int gender; int age;} Student;#endifmain.c
#include <stdio.h>#include "student.h"void inputList(Student aStu[], int number);int save(Student aStu[], int number);int main(int argc, char *argv[]) { int number = 0; printf("请输入学生的数量:"); scanf("%d", &number); Student aStu[number]; inputList(aStu, number); if(save(aStu, number)){ printf("保存成功/n"); } else { printf("保存失败/n"); } return 0;}void inputList(Student aStu[], int number){ char format[20]; sprintf(format, "%%%ds", 19); int i; for(i = 0; i < number; i++){ printf("第%d个学生:/n", i); printf("/t姓名:"); scanf(format, aStu[i].name); printf("/t性别(0-男,1-女,2-其他)"); scanf("%d", &aStu[i].gender); printf("/t年龄:"); scanf("%d", &aStu[i].age); }}int save(Student aStu[], int number){ int ret = -1; FILE *fp = fopen("Student.data", "w"); if(fp){ ret = fwrite(aStu, sizeof(Student), number, fp); fclose(fp); } return ret == number;}student.data中保存的是二进制
student.h
int index = 0;main.c
#include <stdio.h>#include "student.h"void read(FILE *fp, int index);int main(int argc, char *argv[]) { FILE *fp = fopen("student.data", "r"); if(fp){ fseek(fp, 0L, SEEK_END); long size = ftell(fp); int number = size / sizeof(Student); printf("有%d个数据,你要看第几个:", number); int index = 0; scanf("%d", &index); read(fp, index - 1); fclose(fp); } return 0;}void read(FILE *fp, int index){ fseek(fp, index*sizeof(Student), SEEK_SET); Student stu; if(fread(&stu, sizeof(Student), 1, fp) == 1){ printf("第%d个学生:", index + 1); printf("/t姓名:%s/n", stu.name); printf("/t性别:"); switch(stu.gender){ case 0: printf("男/n"); break; case 1: printf("女/n"); break; case 2: printf("其他/n"); break; } printf("/t年龄:%d/n", stu.age); } }tips
student.data这种二进制文件不具有可移植性 在int位32位的机器上写成的数据文件 不能直接在int为64位的机器上正确读写更好的方案是用文本新闻热点
疑难解答