文件学习
1 FILE* fp; 2 char ch,filename[10]; 3 printf("请输入所用的文件名:"); 4 scanf("%s",filename); 5 if((fp = fopen(filename,"w"))== NULL) 6 { 7 printf("无法打开此文件"); 8 exit(0); 9 } 10 ch = getchar();//存入scanf后的换行 11 printf("请输入一个准备存储到磁盘的字符串(以#结束)"); 12 ch = getchar(); 13 while(ch != '#') 14 { 15 fputc(ch,fp); 16 putchar(ch); 17 ch = getchar(); 18 } 19 fclose(fp); 20 putchar(10);//输出一个换行符 21 return 0;
这是基本的文件打开与关闭,输出(fputc)得操作,自动创建文件创建在该程序源文件所在得文件夹下。因为可能打开失败,所以做一个if判断,如果失败可以及时跳出;C里面的输入要注意scanf是不吃回车的,要用getchar()吃掉
创建的文档类型是文件,如果想要创建的文件名有.txt后缀,那么创建的就是txt,也会自动匹配已经创建的txt文档
“w"是进行输出到文件,如果原来存在你想要输出的文件,那么,就会将原来的文件清空,再进行输出
”a"进行补充,在文件末尾继续输出,不会自动换行
输出到文件的可以是中文啊(真的厉害)如下这样就输出不了中文
char ch = '我'; printf("qq%cqq",ch);
接下来联系一下fputc()和fgetc()
1 void change_file(char changefilename[],char newfilename[]) 2 { 3 FILE *fp1,*fp2; 4 if((fp1 = fopen(changefilename,"r")) == NULL) 5 { 6 printf("无法打开此文件"); 7 exit(0); 8 } 9 if((fp2 = fopen(newfilename,"w")) == NULL) 10 { 11 printf("无法打开此文件"); 12 exit(0); 13 } 14 char ch; 15 while(!feof(fp1)) 16 { 17 ch = fgetc(fp1); 18 fputc(ch,fp2); 19 putchar(ch); 20 } 21 fclose(fp1); 22 fclose(fp2); 23 }
feof()函数可以检查文件读写位置(文件指针的指向)是否到了末尾,是为真(1),否为假(0)
接下来单个单个的字符拷贝太麻烦了,直接来个字符串的操作吧fgets(),fputs()
1 void insert_stofile(char str[][10],int n,char filename[],char way[]) 2 { 3 FILE *fp1; 4 if((fp1 = fopen(filename,way)) == NULL) 5 { 6 exit(0); 7 } 8 for(int i = 0;i < n;i++) 9 { 10 fputs(str[i],fp1); 11 fputs("\n",fp1); 12 puts(str[i]); 13 } 14 }
fputs()向文件写入字符串时要注意应人工分开所传入的字符串,方便只读时输入到计算机
1 void read_sfromfile(char filename[],char way[]) 2 { 3 FILE *fp; 4 char str[10][10]; 5 int i = 0; 6 if((fp = fopen(filename,way)) == NULL)exit(0); 7 while(fgets(str[i],1024,fp) != NULL) 8 { 9 i++; 10 } 11 for(int j = 0;j < i;j++) 12 { 13 //puts(str[j]);//自动换行了,重复换行了,因为我把换行当作了,文件中字符的分割 14 printf("%s",str[j]); 15 } 16 }
fgets()成功返回str的地址,失败返回NULL
二进制方式的读写,常用于结构体
fread()
1 FILE *fp ; 2 fp = fopen("stofilesort.txt","ab+"); 3 char str2[100]; 4 int i; 5 // for(i = 0; i < 2;i++) 6 // { 7 // fread(&str2[i],1,2,fp); 8 // printf("i = %d\n",i); 9 // } 10 fread(&str2,2,1,fp);//注意在末尾添加结束标志 11 str2[2] = '\0'; 12 printf("str2 = %s\n",str2); 13 fclose(fp);
fwrite()
1 char str[][10]={"def","abc","bcd"}; 2 sort_string_xiao(str,3); 3 FILE *fp ; 4 fp = fopen("stofile.txt","wb+"); 5 fwrite(str,10,3,fp);//注意在末尾添加结束标志 6 //将三维数组读入文件了 7 fclose(fp);
难点所在就是要注意size 与count的参数设定
两个函数成功后都返回coount
然后随机读写,要明白两个函数吧rewind(fp);使文件指针指向开头
fseek(fp,位移量,起始点)以起始点为基点,前为正方向,位移,数字末尾加L
起始点:0表示文件开头,1表示当前位置,2表示文件末尾
然后就多打一下代码训练训练吧~~