12IO流的打开和关闭
FILE* fopen (
const char* filename, //文件路径
const char* mode // 打开模式
);
打开模式:
r: 读
w: 写
a: 追加
r+: 读写,文件必须存在,从头开始
w+: 写读,文件不存在就创建,文件存在就清空
a+: 读写,文件不存在就创建,文件存在就追加
b: 二进制方式
int fclose (
FILE* fp // fopen的返回值
);
成功返回0,否则返回EOF。
二、非格式化IO
int fputc (
int c, // 字符
FILE* stream // IO流指针
);
成功返回c,失败返回EOF。
int fgetc (
FILE* stream // IO流指针
);
成功返回读到的字符,失败或者遇到文件尾返回EOF。
#include <stdio.h> //相对路径:本目录下的路径 //绝对路径:自定义指定文件的位置 int main() {//FILE* 文件操作方面固定指针模式 FILE* fp=fopen("10_1.txt","r"); if(!fp) { perror("fopen"); return 0; } FILE* fp1=fopen("F://C语言全部内容//C语言新一期案例//9.VIP项目-学生管理系统一//10_2.txt","w+"); if(!fp1) { perror("fopen");//微软提供的专业来的打印错误提示用的函数 return 0; } int c; for(;;)//100张100元美金,int i=1;i<=100;i++/i+=2 死循环 { c=fgetc(fp); if(c==EOF)//判断有没有到文件的结尾 break; fputc(c,fp1); } fclose(fp); fclose(fp1); return 0; }
#include <stdio.h> //结构体的类型名==结构体变量名或指针===访问结构体的成员 //结构体是用来存储一堆不同数据类型的数据 struct stu//结构体的类型名 {//结构体的成员 char n_name[50];//数组的变量名,数组的首地址 。 //数组是用来存储一堆相同数据类型的数据 0-19这么多个字符 int n_num; int n_age; char addr[100]; }boya[2],boyb[2],*pa,*pb;//结构体变量名或指针 int main() { FILE* fp; int i; pa=boya; pb=boyb; if((fp=fopen("10_1.dat","wb+"))==NULL) { perror("fopen"); return 0; } printf("请输入数据:\n");//输入到缓冲区 for(i=0;i<2;i++,pa++) scanf("%s%d%d%s",pa->n_name,&pa->n_num,&pa->n_age,pa->addr); pa=boya; fwrite(pa,sizeof(struct stu),2,fp); rewind(fp);//把文件光标移动文件首位。 fread(pb,sizeof(struct stu),2,fp); printf("\n\nname\tnumber\tage\taddr\t\n"); for(i=0;i<2;i++,pa++) printf("%s\t%d\t%d\t%s\t\n",pa->n_name,pa->n_num,pa->n_age,pa->addr); fclose(fp); return 0; }