C语⾔⽂件操作函数总结——超详细
版权声明
⽂件与流
在C语⾔中有三种标准流:
stdin(standard input stream)标准输⼊流。在⼤多数环境中为从键盘输⼊;scanf( )和getchar( )等函数会从该流中读取字符
stdout(standard output stream)标准输出流。在⼤多数环境中为输出⾄显⽰器界⾯。printf( )、puts( )、putchar( )等函数会向该流中写⼊字符。
stderr(standard error stream)标准错误流。在⼤多数环境中为输出⾄显⽰器界⾯。
在C语⾔中⽤FILE表⽰⽂件类型并提供相应的操作。FILE定义在<stdio.h>头⽂件中,其具体实现⽅法因编译器⽽异,⼀般以结构体的形式实现。表⽰标准流的stdin、stdout、stderr都是指向FILE的指针。
⽂件常见操作
接下来介绍常见的⽂件操作。
1、打开⽂件
利⽤fopen( )打开⽂件,函数如下:
FILE *fopen( const char *filename, const char *mode );
第⼀个参数:该参数为字符串类型,表⽰要打开的⽂件的名称
第⼆个参数:该参数为字符串类型,表⽰打开模式(只读、只写、更新、追加)
fopen( )函数会为要打开的⽂件创建流并返回⼀个指向⽂件对象的FILE*型指针。
2、关闭⽂件
利⽤fclose( )打开⽂件,函数如下:
int fclose( FILE *stream );
输⼊参数:要关闭的⽂件的指针
伦勃朗是哪个时期的画家返回值:成功关闭返回0,否则返回EOF
练习:⽂件的打开与关闭
代码如下:
{
FILE *fp=fopen("D:\\","r");
if(fp==NULL){
puts("⽂件打开失败");
}else{
puts("成功打开⽂件");
}
int result=fclose(fp);
if(result==0){
puts("成功关闭⽂件");
}else{
puts("⽂件关闭失败");
}
return 0;
}
结果如下:
成功打开⽂件
成功关闭⽂件
3、从⽂件中读取数据
利⽤fscanf( )从⽂件中读取数据,函数如下:
正则表达式1到100之间int fscanf( FILE *stream, const char *format, ... );
与scanf( )函数⽐起来,fscanf( )函数多了⼀个输⼊参数即FILE *stream;它表⽰从哪个⽂件读取数据。除此以外,它与scanf( )函数完全相同。例如,要从fp中读取⼗进制整数值并保存是x,代码如下:
fscanf(fp,"%d",&x);
练习:从⽂件读取学⽣的成绩并计算各科平均成绩
在D盘根⽬录下准备成绩⽂件
内容如下:
⼩明 70 84
⼩王 80 90
⼩坤 90 90
代码如下:
{
int number=0;
char name[20];
int chinese;
int math;
int chinese_sum=0;
int math_sum=0;
FILE *fp=fopen("D:\\","r");
if(fp!=NULL){
puts("开始读取数据");
while(fscanf(fp,"%s%d%d",name,&chinese,&math)==3){
printf("%s %d %d\n",name,chinese,math);txt编码转换
number++;
chinese_sum=chinese_sum+chinese;
math_sum=math_sum+math;
}
puts("-------------");
printf("平均 %d %d\n",chinese_sum/number,math_sum/number);
}else{
puts("⽂件打开失败");
}
int result=fclose(fp);
if(result==0){
puts("成功关闭⽂件");
}else{
puts("⽂件关闭失败");
}
return 0;
}
核⼼代码就⼀⾏:
while(fscanf(fp,"%s%d%d",name,&chinese,&math)==3){ }
在此,利⽤fscanf( )函数读取中的每⼀⾏数据并将学⽣名字存⼊变量name,语⽂成绩存⼊chinese,数学成绩存⼊math;fscanf( )函数的返回值为读取到的数据个数。其余的代码不再解释,也可以参照之前关于scanf( )函数的介绍。
结果如下:
开始读取数据
⼩明 70 84
⼩王 80 90
⼩坤 90 90
-------------
平均 80 88
成功关闭⽂件
4、向⽂件中写⼊数据
利⽤fprintf( )向⽂件中写⼊数据,函数如下:
int fprintf( FILE *stream, const char *format, ... );
fprintf( )函数的使⽤也很简单,与printf( )函数⽐起来它多了⼀个输⼊参数即FILE *stream;它表⽰向哪个⽂件写⼊数据。除此以外,它与printf( )函数完全相同。例如,要向fp中写⼊⼗进制整数值,代码如下:
fprint(fp,"%d",x);
练习:向⽂件中写⼊当前时间
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
FILE *fp;
php调用mysql存储过程
time_t currentTime = time(NULL);
struct tm *timeStruct = localtime(¤tTime);
if ((fp = fopen("D:\\", "w"))!= NULL){
puts("将当前⽇期和时间保存⾄⽂件");
int year=timeStruct->tm_year + 1900;
int month=timeStruct->tm_mon + 1;
int day=timeStruct->tm_mday;
int hour=timeStruct->tm_hour;
int minute=timeStruct->tm_min;
int second=timeStruct->tm_sec;
fprintf(fp,"%d %d %d %d %d %d\n",year,month,day,hour,minute,second);
fclose(fp);
}
mockingbird和robin的区别return 0;
}
要点概述:
include包含了与时间相关的头⽂件<time.h>
利⽤time( )函数得到系统的⽇历时间(Calendar Time)
利⽤localtime( )得到本地时间;该⽅法的返回值是struct tm类型的指针
从timeStruct中分别获取年⽉⽇时分秒
利⽤fprintf( )将年⽉⽇时分秒保存⾄⽂件
5、scanf( )、fscanf( )、printf( )、fprintf( )⼩结
在本⽂开头,我们提到:标准流的stdin、stdout、stderr都是指向FILE的指针。也就是说:这三者都可以直接传递给fscanf( )、fprintf( )函数的第⼀个参数。因此可知,以下两组代码的功能是相同的。
scanf("%d",&x);
fscanf(stdin,"%d",&x);
printf("%d",x);
fprintf(stdout,"%d",x);
也就是说:
scanf( )是输⼊源被限定为标准输⼊流的fscanf( )
printf( )是输出⽬标被限定为标准输出流的fprintf( )
6、fgetc( )和fputc( )
之前我们利⽤putchar( )和getchar( )将键盘输⼊的⽂字显⽰到控制台代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
putchar函数{
int ch;
while((ch=getchar())!=EOF){
putchar(ch);
}
return 0;
}
在该⽰例中是从键盘读⼊数据,输出到控制台。
在此,介绍两个⾮常类似的函数。
⾸先来看fgetc( ):
int fgetc( FILE *stream );
该函数⽤于从⽂件中读取⼀个字符并将其转为int型作为函数的返回值。接着来看fputc( ):
int fputc( int ch, FILE *stream );
该函数⽤于向⽂件中写⼊⼀个字符。
练习:将⽂件内容显⽰⾄控制台
代码如下:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论