格式化读写
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函数也能起到定位文件指针的作用
int rewind ( 文件类型指针 )
该函数的作用是使位置指针重新返回文件的开头,该函数没有返回值
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;j<len-i-1;j++){ //至少走
// if(cc[j]>cc[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");
总结:更绕了 阿西吧