注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

勇敢的劳尤条

 
 
 

日志

 
 

文件输入/输出ACM改进版(freopen函数)[转]  

2013-08-31 11:47:47|  分类: 基础代码(一天一 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
还记得以前调试程序的时候,经常要手动输入输出很不爽,后面就将数据保存在文件中,让程序自己读。
下面先介绍以前的做法。用ifstream和ofstream,在头文件fstream中,用法看下面的例子。

#include<fstream>
#include<iostream>
using namespace std;
int main()
{
ifstream instuf("in.txt",ios::in);
int a,b;
while(instuf>>a>>b)
cout<<a+b<<endl;
return 0;
}

上面例子的缺点是,当你想提交代码到oj的时候,instuf这样的流要全部改成标准输入或输出,这样确实有点小不爽,但是也减轻了一定的工作。但是下面,我还要介绍另一种方法,可以不用改源代码,而是重定向流,还是喜欢在linux下面的操作啊,流的定向那么简单。


在stdio.h中包含的一个函数freopen,可以实现标准输出输入的重定向

FILE * freopen ( const char * filename, const char * mode, FILE * stream );
【参数说明】

filename: 要打开的文件名

mode: 文件打开的模式,和fopen中的模式(r/w)相同

stream: 文件指针,通常使用标准流文件(stdin/stdout/stderr)

返回值:成功,则返回一个filename所指定文件的指针;失败,返回NULL。(一般可以不使用它的返回值)
功能:实现重定向,把预定义的标准流文件定向到由filename指定的文件中。标准流文件具体是指stdin、stdout和stderr。其中stdin是标准输入流,默认为键盘;stdout是标准输出流,默认为屏幕;stderr是标准错误流,一般把屏幕设为默认。  

使用freopen()函数的优点是,我们不再需要修改scanf和printf,也不需要修改cin和cout,而是维持代码的原样就可以了。因为freopen()函数重定向了标准流,使其指向前面指定的文件。

最后只要使用fclose关闭输入文件和输出文件即可。

fclose(stdin);fclose(stdout);

若要恢复句柄,可以重新打开标准控制台设备文件,只是这个设备文件的名字是与操作系统相关的。

DOS/Win:
freopen("CON", "r", stdin);
freopen("CON", "w", stdout);

Linux:
freopen("/dev/console", "r", stdin);//(控制台)
freopen("/dev/console", "w", stout);
//重定向到终端输出
freopen("/dev/tty","w",stdout);
刷新输出
fflush( STDOUT );

附上一个例子

C语法:
#include <stdio.h>
int main()
{
int a,b;

freopen("in.txt","r",stdin); //输入重定向,输入数据将从in.txt文件中读取
freopen("out.txt","aw",stdout); //输出重定向,输出数据将保存在out.txt文件中

while(scanf("%d %d",&a,&b)!=EOF)
printf("%d\n",a+b);

fclose(stdin);//关闭文件
fclose(stdout);//关闭文件
return 0;
}

C++语法
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
freopen("in.txt","r",stdin);
//输入重定向,输入数据将从in.txt文件中读取
freopen("out.txt","w",stdout);
//输出重定向,输出数据将保存在out.txt文件中
int a,b;

while(cin>>a>>b)
cout<<a+b<<endl; // 注意使用endl

fclose(stdin);//关闭文件
fclose(stdout);//关闭文件
return 0;
}


标准 C I/O(十分全面,很nice)

  评论这张
 
阅读(136)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017