C语言文件操作,c语言提供了命令用来实现文件包含的操作
//从流中获取字符串。从流中获取字符串。
char *fgets(char *string,int n,FILE * stream);
//将字符串写入流。向流中写入一个字符串。
int fputs(const char *string,FILE * stream);
用fgets函数读取一行:
int main()
char buff[100]={ 0 };
FILE* pf=fopen(test.txt , r );
if (pf==NULL)
返回0;
//读取文件
fgets(buff,100,pf);
printf(%s ,buff);//注意buff本身有一个换行符(文件末尾有一个换行符)
//打开成功,读取并关闭文件。
fclose(pf);
pf==NULL
返回0;
}
读取一行并在显示器上打印出来,如图所示:
用fputs函数写一行:
int main()
char buff[100]={ 0 };
FILE* pf=fopen(test.txt , w );
if (pf==NULL)
返回0;
//写入文件
fputs(hello\n ,pf);
fputs(word\n ,pf);
//打开成功,写入文件,关闭文件
fclose(pf);
pf=NULL
返回0;
}
用fputs在文件中写入一行:如下所示:
Fgets和fputs也可以操作键盘和屏幕。
输入键盘abcd,进入屏幕打印abcd。
FSF和fprintf
FSF格式输入功能适用于所有输入流。
fprintf打印格式功能适用于所有输出流。
简单对比一下scanf和fscanf,printf和fprintf,用法非常相似。
int scanf( const char *format [,argument].);
int fscanf( FILE *stream,const char *format [,argument ].);
int printf( const char *format [,argument].);
int fprintf(文件*流,常量字符*格式[,参数].);
Fprintf写文件
结构S
int n;
浮动分数;
char arr[10];
int main()
struct S s={ 100,3.14, ABC };
FILE* pf=fopen(test.txt , w );
if (pf==NULL)
返回0;
//以格式化的形式编写文件
fprintf(pf, %d %f %s ,s.n,s.score,s . arr);
fclose(pf);
pf=NULL
返回0;
}
FSF阅读文件
结构S
int n;
浮动分数;
char arr[10];
int main()
struct S s={ 100,3.14, ABC };
FILE* pf=fopen(test.txt , w );
if (pf==NULL)
返回0;
//以格式化的形式输入数据
fscanf(pf, %d %f %s ,s.n,s.score,s . arr);
fclose(pf);
pf=NULL
返回0;
}
当然,fscanf和fprintf函数也可以应用于标准iostream (stdin、stdout)。
比较一组函数
scanf/fscanf/sscanf
ptintf/fprintf/sprintf
Scanf/printf:是标准输入流/标准输出流的格式化输入/输出语句。
Fscnaf/fprintf:所有输入流/所有输出流的格式化输入/输出语句。
SSCANF/Sprintf: SSCANF从字符串中读取格式化数据。Sprintf是将格式化的数据输出(存储)到一个字符串中。
红柱石和铁闪石
Fread二进制输入功能适用于文件。
Fwrite二进制输出函数适用于文件。
size_t fwrite( const void *buffer,size_t size,size_t count,FILE * stream);
size_t fread( void *buffer,size_t size,size_t count,FILE * stream);
结构
char name[20];
int age
双倍积分;
int main()
Struct s s s={ 张三,20,55.6 };
FILE* pf=fopen(test.txt , WB );
if (pf==NULL)
返回0;
//以二进制形式编写文件
fwrite( s,sizeof(struct S),1,pf);
fclose(pf);
pf=NULL
返回0;
}
Fread读取文件,fwrite写入文件。这两个函数的用法相似。
二、文件的随机读写功能
上面说的函数都是顺序读写函数,有时候我们需要从某个位置开始读写函数。以下功能可以实现其功能。
Fseek函数
根据文件指针的位置和偏移量。
将文件指针移动到指定位置。
int fseek( FILE *stream,long offset,int origin);
//这三个参数指的是什么:pf偏移文件指针的当前位置
int main()
FILE* pf=fopen(test.txt , r );
if (pf==NULL)
返回0;
//定位文件指针
fseek(pf,2,SEEK _ CUR);//偏移量是2
//读取文件
int ch=fgetc(pf);
prinf(%c\n ,ch);
fclose(pf);
pf=NULL
返回0;
}
如图,从文件指针当前位置A的前面偏移2,打印c。
搜索_当前
文件指针的当前位置(文件指针的当前位置)
SEEK_END(文件的结束位置)
文件结尾
SEEK_SET(文件开始位置)
文件开头
三。对文档结尾的判断
我们知道:EOF-文件结束的结尾。
如果一个文件里什么都没有,我们打开文件时读到的是“-1”,在文件末尾有一个EOF。
Feof函数
记住:在读取一个文件的过程中,不能用feof函数的返回值直接决定文件是否完成。
而是用来判断读取结束失败还是文件结束是由文件结束EOF引起的。
文本文件是否读完,判断返回值是EOF还是NULL。
比如fgetc判断是否是EOF fgets,判断返回值是否为NULL。
判断二进制文件的读取结束,并判断返回值是否小于实际要读取的数目。
例如,fread判断返回值是否小于要读取的实际数目。
这就是我今天要讲的内容。本文介绍另一部分文件操作,然后最后一部分《C语言文件操作 一》,是我的笔记和上课的一些体会。
希望对大家有帮助!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。