C语言之文件操作

来源:互联网 发布:json的datatype 编辑:程序博客网 时间:2024/05/18 03:44

freopen函数的使用

使用的理由(范围):如果输入数据很庞大,需要一次又一次的重新输入和调试时可采用本函数

格式的介绍: FILE * freopen ( const char * filename, const char * mode, FILE * stream );

参数的说明:

filename: 要打开的文件名mode: 文件打开的模式,和fopen中的模式(r/w)相同stream: 文件指针,通常使用标准流文件(stdin/stdout/stderr)

返回值:成功,则返回一个path所指定文件的指针,失败,返回NULL(一般可以不使用它的返回值)

功能:实现重定向,把预定义的标准流文件定向到由path指定的文件中,标准流文件具体是指stdin,stdout和stderr,其中stdin是标准输入流,默认为键盘,stdout是标准输出流,认为屏幕,stderr是标准错误流,一般把屏幕设为默认,通过调用freopen,就可以修改标准流文件的默认值,实现重定向

举例使用(一):

#include <stdio.h>int main(){    /* redirect standard output to a file */    if (freopen("D:\\OUTPUT.txt", "w", stdout)==NULL){        fprintf(stderr, "error redirecting stdout\n");        //fprintf()函数中格式化的规定与printf()函数相同,所不同的只是fprintf()函数是向文件中写入,而printf()是向屏幕输出    }    printf("This will go into a file.");//this output will Go to a file    fclose(stdout);//close the standard output stream     return 0;}

举例使用(二):

#include <stdio.h>#define LOCAL#define NIF 1000000000int main(){    #ifdef LOCAL      freopen("in_data.txt","r",stdin);    freopen("out_data.txt","w",stdout);    #endif    int x,n = 0,min = NIF,max = -NIF,s=0;    while(scanf("%d",&x) == 1){        s+= x;        if(x < min) min = x;        if(x > max) max = x;        //printf("x = %d ,min = %d ,max = %d \n",x,min,max);        n++;    }    printf("%d %d %0.3f\n",min,max,(double)s/n);    return 0;}//注意:重定向部分被写在了#ifdef和#endif中,其含义是:只有定义了符号LOCAL才编译两条freopen语句

首先在相对路径中建立in_data.txt,然后再里面输入数据,相当于你在输入流中输入输出,只不过他是重定向到in_data.txt文件了,然后输出结果时,他又重定向到文件out_data.txt文件中

应用:在acm竞赛中,常常需要输入大量的输出,而我们如果每次在控制端输入的话,会花费大量的时间,而如果我们将其放入到文件中,我们就可以保存下来,然后进行测量大量的数据,而不用话费大量的时间

fopen函数的使用

fopen函数用于打开文件,其调用格式为:

FILE *fopen(char *filename, *type);1.fopen()函数中第一个形式参数表示文件名,可以包含路径和文件名两部分2.第二个形式参数表示打开文件的类型:"r":打开文字文件只读"w":创建文字文件只写"a":增补, 如果文件不存在则创建一个"r+":打开一个文字文件读/写"w+":创建一个文字文件读/写"a+":打开或创建一个文件增补"b":二进制文件(可以和上面每一项合用)"t":文这文件(默认项)

举例使用(一):

#include <stdio.h>#define NIF 1000000000int main(){    FILE *fin,*fout;       fin = fopen("in1_data.txt","rb");    fout = fopen("out1_data.txt","wb");    int x,n = 0,min = NIF,max = -NIF,s=0;    while(fscanf(fin,"%d",&x) == 1){        s+= x;        if(x < min) min = x;        if(x > max) max = x;        // printf("x = %d ,min = %d ,max = %d \n",x,min,max);        n++;    }    fprintf(fout,"%d %d %0.3f\n",min,max,(double)s/n);    fclose(fin);    fclose(fout);    return 0;}

若想把fopen 版的程序改写成读写标准输入输出,只需输入 fin = stdin,fout = stdout即可,不需要调用fopen和fclose

0 0
原创粉丝点击