格式化读写

c语言中最常用的输入输出是printf()函数和scanf()函数但是对于文件操作我们用到fprintf()与fscanf。fprintf和fscanf函数,与printf和scanf函数的作用相似。它们最大的区别就是 读写的对象不同,fprintf和fscanf函数读写的对象不是终端,而是磁盘文件。

fprintf函数

一般形式如下: ch = fprintf( 文件类型指针, 格式字符串, 输出列表);

例如:

fprintf ( fp, “%d”,i ); 它的作用是将整型变量i 的值以 “%d”的格式输出到 fp指向的文件中。

fscanf函数

一般形式如下: fscanf(文件类型指针,格式字符串,输入列表)

例如:

fscanf (fp, “%d”, &i ); 它的作用是读入fp所指向的文件中的i的值。

随机读写

在对文件进行操作时,往往不需要从头开始,一般只需对其中指定的内容进行 操作。这时,就需要使用文件定位函数来实现对文件的随机读取。有三种随机读写函数。

fseek函数

fseek 本身 定位位置指针

fseek 函数 int fess(文件类型指针,位移量 ,起始地)

函数功能:移动文件流的读写功能

起始位置分三种情况: 文件首 SEEK- SET==0

文件当前位置 SEEK- CUR==1

文件尾 SEEK- END==2

例如:fseek ( fp, -20L, 1); 表示 将位置指针从当前位置向后退20个字节

rewind函数

rewind函数也能起到定位文件指针的作用

intrewind ( 文件类型指针 )

该函数的作用是使位置指针重新返回文件的开头,该函数没有返回值

ftell函数

ftell函数的一般形式如下:long ftell(文件类型指针)

该函数的作用是读写位置距离文件开始有多少字节。当ftell函数的返回值为-1L时,表示出错。

文件练习

先写入再复制到第三个中并排序。

//int main(){// FILE *pa = fopen("./mm.txt","r+");// FILE *pb = fopen("./tt.txt","a+");// if(pa==NULL){// printf("gg");// }// if(pb==NULL){// printf("gg");// }// char cd[100];// fgets(cd,30,pa);// fputs(cd,pb);// fclose(pa);// pb = fopen("./tt.txt","r");// FILE *pc = fopen("./nn.txt","w");// char cc[100];// fgets(cc,20,pb);//// int i,j;// char t;// int len = strlen(cc);// for(i=0;i<len-1;i++) { //最差走..// for(j=0;jcc[j+1]){ //偌大交换// t = cc[j+1];// cc[j+1]=cc[j];// cc[j]=t;// }// }// }// fputs(cc,pc);// printf("成功\n");// fclose(pc);// fclose(pb);=//return 0;//}

改表格数据

typedef struct a{int id;char name[10];float money;}SSS;int main(){FILE *pa = fopen("./cctv.txt","r+");if(pa==NULL){printf("no g\n");}SSS a[4] = {{2208,"zhang",10000},{2107,"lisa",12000},{2109,"wang",13000},{2003,"ming",15000}};int i;for(i=0;i<4;i++){fprintf(pa,"%d %s %f\n",a[i].id,a[i].name,a[i].money);}rewind(pa);SSS b[4];for(i=0;i<4;i++){fscanf(pa,"%d %s %f\n",&a[i].id,&a[i].name,&a[i].money);}for(i=0;i<4;i++){printf("%d %s\t%.1f\n",a[i].id,a[i].name,a[i].money);}long rr = ftell(pa);printf("%ld\n",rr);fseek(pa,-22,SEEK_END);fputs("llcd",pa);fseek(pa,-41,SEEK_END);fputs("15000",pa);return 0;}

重定向(输入、输出)

FILE *freopen(要打开的文件名,打开模式(加引号),文件指针标准流、stdin /stdout)

freopen(“CON”,”w”,stdout);关闭输入/输出流。

// FILE *fp = freopen("stdout.txt","w",stdout);// if(fp ==NULL){// printf("G");// }// puts("a");// puts("b");// puts("c");// puts("E");// puts("F");// fclose(fp);// freopen("CON","w",stdout);// puts("1");// puts("2");FILE *fp = freopen("stdin.txt","r",stdin);if(fp ==NULL){printf("G");}char cc[20];fgets(cc,10,fp);printf("%s",cc);printf("1"); 

总结:更绕了 阿西吧