freopen的作用是什么??在c++中
遇到了一些问题,题目只有运用freopen才能通过,,不明白是为什么??!
读入测试文件
freopen("test.in", "r", stdin);
freopen("test.out", "w", stdout);
freopen函数简介
freopen是被包含于C标准库头文件stdio.h中的一个函数,用于重定向输入输出流。该函数可以在不改变代码原貌的情况下改变输入输出环境,但使用时应当保证流是可靠的。
freopen函数说明
函数名:freopen
函数,以指定模式重新指定到另一个文件。模式用于指定新文件的访问方式。
头文件:stdio.h
C89函数声明:
*FILE freopen( const char filename, const char mode, FILE stream );
C99函数声明:
FILE freopen(const char * restrict filename, const char * restrict mode, FILE * restrict stream);
形参说明:
filename:需要重定向到的文件名或文件路径。
mode:代表文件访问权限的字符串。例如,"r"表示“只读访问”、"w"表示“只写访问”、"a"表示“追加写入”。
stream:需要被重定向的文件流。
返回值:如果成功,则返回该指向该输出流的文件指针,否则返回为NULL。
程序实例
附加说明:
stdout(Standardoutput)标准输出
stdin(Standardinput)标准输入
stderr(Standarderror)标准错误
例子1
这个例子实现了从stdout到一个文本文件的重定向。即,把输出到屏幕的文本输出到一个文本文件中。
#include "stdafx.h"
#include<stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{
if(freopen("D:\\output.txt","w",stdout)==NULL)
fprintf(stderr,"error redirecting stdout\n");
for(int i=0;i<10;i++)
printf("%3d",i);
printf("\n");
fclose(stdout);
return 0;
}
运行结果:
十个数输出到了D盘根目录下文本文件output.txt中。
例子2
从文件in.txt中读入数据,计算加和输出到out.txt中
#include "stdafx.h"
#include<stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{
int a,b;
freopen("D:\\in.txt","r",stdin);
freopen("D:\\output2.txt","w",stdout);
while(scanf("%d%d",&a,&b)!=EOF)
printf("%d\n",a+b);
fclose(stdin);
fclose(stdout);
return 0;
}
运行结果:
计算的和输出到了D盘根目录下文本文件output2.txt中。