相关博文:C语言之文件读写探究(一):fopen、fclose(文件的打开和关闭)
相关博文:C语言之文件读写探究(二):fputc、fgetc、feof(一次读写一个字符(文本操作))
相关博文:C语言之文件读写探究(三):fputs、fgets、feof(一次读写一行字符(文本操作))
相关博文:C语言之文件读写探究(四):fwrite、fread(一次读写一块数据(二进制操作))
相关博文:C语言之文件读写探究(五):rewind、ftell、fseek(文件指针偏移)
相关博文:C语言之文件读写探究(六):fscanf、fprintf(格式化读写文件)
相关博文:C语言之文件读写探究(七):随机读写文件
fputc
例1:
附例1代码:
//小问学编程#include<stdio.h>int main( ){FILE* fp=fopen("hello.txt","w");if(fp==NULL){printf("open error\n");return -1;}for(char ch='a';ch<='z';ch++){printf("%3c",fputc(ch,fp));}fclose(fp);return 0;}
fgetc
读取字符,重点是判断,结束条件是什么?通常的做法是依据返回值。
例2:
附例2代码:
//小问学编程#include<stdio.h>int main(){FILE* fp=fopen("hello.txt","r");if(fp==NULL){printf("open error\n");return -1;}char ch;while((ch=fgetc(fp))!=EOF)//优先级,关系>赋值printf("%c",ch);fclose(fp);return 0;}
feof
feof这个函数,是去读标志位判断文件是否结束的。即在读到文件结尾的时候再去读一次,标志位才会置位,此时再来判断文件处理结束状态,文件到结尾。如果用于打印,则会出现多打一次的现象。
例3:
附例3代码:
//小问学编程#include<stdio.h>int main(){FILE* fp=fopen("hello.txt","w+");if(fp==NULL){printf("open error\n");return -1;}for(char ch='a';ch<='z';ch++){fputc(ch,fp);}rewind(fp);char ch;while((ch=fgetc(fp))&&!feof(fp))//正确的姿势{printf("%c",ch);}fclose(fp);return 0;}
下面举一个例子,让程序打开一个名为hello.txt的文件,然后创建一个new.txt文件,读取前一个文件的内容并写入后一个文件中。
例4
附例4代码:
//小问学编程#include<stdio.h>#include<stdlib.h>int main(){FILE* fp1;FILE* fp2;int ch;if((fp1=fopen("hello.txt","r"))==NULL){printf("打开文件失败!\n");exit(-1);}if((fp2=fopen("new.txt","w"))==NULL){printf("打开文件失败!\n");exit(-1);}while((ch=fgetc(fp1))!=EOF){fputc(ch,fp2);}fclose(fp1);fclose(fp2);return 0;}
实现linux中cp命令的功能
附上例代码:
//小问学编程#include<stdio.h>#include<stdlib.h>int main(int argc,char* argv[]){if(argc<3){printf("uage:%s src dest\n",argv[0]);return 0;}FILE* fp=fopen(argv[1],"r");if(fp==NULL){return -1;}FILE* fp2=fopen(argv[2],"w");if(fp2==NULL){fclose(fp);return -1;}char ch;while((ch=fgetc(fp))!=EOF){fputc(ch,fp2);ch=fgetc(fp);}fclose(fp);fclose(fp2);}