freopen以前经常使用,比较方便,可以当作模板,在中间替换为自己的代码即可使用。

#include <stdio.h> // 实际使用中发现freopen也包含在iostream.h中,C++代码#include <iostream.h>即可。int main()
{freopen("sample.in", "r", stdin);freopen("sample.out", "w", stdout);/* 同控制台输入输出 */fclose(stdin);fclose(stdout);return 0;
}

-----转自:http://www.slyar.com/blog/c-freopen-stdin-stdout.html  -------------

当我们求解acm题目时,通常在设计好算法和程序后,要在调试环境(例如VC 等)中运行程序,输入测试数据,当能得到正确运行结果后,才将程序提交到oj中。但由于调试往往不能一次成功,每次运行时,都要重新输入一遍测试数据,对 于有大量输入数据的题目,输入数据需要花费大量时间。

使用freopen函数可以解决测试数据输入问题,避免重复输入,不失为一种简单而有效的解决方法。

函数名:freopen
声明:FILE *freopen( const char *path, const char *mode, FILE *stream );
所在文件: stdio.h
参数说明:
path: 文件名,用于存储输入输出的自定义文件名。
mode: 文件打开的模式。和fopen中的模式(如r-只读, w-写)相同。
stream: 一个文件,通常使用标准流文件。
返回值:成功,则返回一个path所指定文件的指针;失败,返回NULL。(一般可以不使用它的返回值)
功能:实现重定向,把预定义的标准流文件定向到由path指定的文件中。标准流文件具体是指stdin、stdout和stderr。其中stdin是标准输入流,默认为键盘;stdout是标准输出流,默认为屏幕;stderr是标准错误流,一般把屏幕设为默认。

下面以在VC下调试“计算a+b”的程序举例。
C语法:
#include <stdio.h>
int main()
{
int a,b;
freopen("debug\\in.txt","r",stdin); //输入重定向,输入数据将从in.txt文件中读取
freopen("debug\\out.txt","w",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.h>
int main()
{
int a,b;
freopen("debug\\in.txt","r",stdin); //输入重定向,输入数据将从in.txt文件中读取
freopen("debug\\out.txt","w",stdout); //输出重定向,输出数据将保存在out.txt文件中
while(cin>>a>>b)
cout<<a+b<<endl; // 注意使用endl
fclose(stdin);//关闭文件
fclose(stdout);//关闭文件
return 0;
}
        freopen("debug\\in.txt","r",stdin)的作用就是把标准输入流stdin重定向到debug\\in.txt文件中,这 样在用scanf或是用cin输入时便不会从标准输入流读取数据,而是从in.txt文件中获取输入。只要把输入数据事先粘贴到in.txt,调试时就方 便多了。
类似的,freopen("debug\\out.txt","w",stdout)的作用就是把stdout重定向到debug\\out.txt文件中,这样输出结果需要打开out.txt文件查看。

需要说明的是:
        1. 在freopen("debug\\in.txt","r",stdin)中,将输入文件in.txt放在文件夹debug中,文件夹debug是在VC 中建立工程文件时自动生成的调试文件夹。如果改成freopen("in.txt","r",stdin),则in.txt文件将放在所建立的工程文件夹 下。in.txt文件也可以放在其他的文件夹下,所在路径写正确即可。
        2. 可以不使用输出重定向,仍然在控制台查看输出。
        3. 程序调试成功后,提交到oj时不要忘记把与重定向有关的语句删除。

转载于:https://www.cnblogs.com/pegasus923/archive/2011/04/22/2024418.html

freopen - C/C++文件输入输出利器相关推荐

  1. ACM必学 C/C++文件输入输出利器—freopen函数

    相信很多人都用过freopen,但是是不是有时候在网上提交代码的时候需要把这句话注释掉,我一开始也是这样的,但还是觉得很麻烦,有时忘记注释,会多错一次,让人很不爽. 网上的资料很乱,什么代码都有,也不 ...

  2. [避坑] C/C++ 如何实现文件输入输出

    请看完后点个赞,谢谢 说起 CSP-J(NOIP普及).CSP- S (NOIP提高).NOIP等等考试,大家应该印象最深的就是文件输入输出了吧,很多考生就是因为这个爆零的. 先说说CCF评测答案的方 ...

  3. freopen函数的使用以及freopen与fopen的区别 open、fopen、freopen区别(文件操作)

    freopen函数的使用以及freopen与fopen的区别 https://www.cnblogs.com/hi3254014978/p/11450960.html freopen函数的使用:参见这 ...

  4. c++语言文件流,C++ IO类、文件输入输出、string流详细讲解

    新的C++标准中有三分之二的内容都是描述标准库.接下来重点学习其中几种核心库设施,这些是应该熟练掌握的. 标准库的核心是很多容器类(顺序容器和关联容器等)和一簇泛型算法(该类算法通常在顺序容器一定范围 ...

  5. python 学习笔记 5 -- 文件输入输出

    本文主要介绍python下的文件输入输出操作,python的文件操作简单易用-通过本文相信你可以熟练掌握file和pickle这两种输入输出操作! 1.文件 你可以通过创建一个file类的对象来打开一 ...

  6. python 中文件输入输出及os模块对文件系统的操作

    整理了一下python 中文件的输入输出及主要介绍一些os模块中对文件系统的操作. 文件输入输出 1.内建函数open(file_name,文件打开模式,通用换行符支持),打开文件返回文件对象. 2. ...

  7. OpenCV文件输入输出的序列化功能的实例(附完整代码)

    OpenCV文件输入输出的序列化功能的实例 OpenCV文件输入输出的序列化功能的实例 OpenCV文件输入输出的序列化功能的实例 #include <opencv2/core.hpp> ...

  8. Kettle使用_11 CSV文件输入输出复制数量

    Kettle使用_11 CSV文件输入输出复制数量 需求: 通过并行方式完成customers-100.txt(该文件有2.4万条记录)的文本输出. 解决方法:结合CSV文本输入和文件文本输出组件解决 ...

  9. C++primer第八章 IO库 8.2 文件输入输出

    8.2文件输入输出 头文件fstream定义了三个类型来支持文件IO:ifstream从一个给定文件读取数据,ofstream向一个给定文件写入数据,以及fstream可以读写给定文件.在17.5.3 ...

最新文章

  1. AS3.0(3)-函数;类;对象
  2. 在联盛德W600 SDK上添加C文件并实现GCC编译
  3. 计算机一级挂科率,[转]计算机一级难吗?看了它想挂科,难难难难把此(精)
  4. web报告工具FineReport在使用方法和解决方案常见错误遇到(一)
  5. JavaWeb学习总结(十三):使用Session防止表单重复提交
  6. 30%企业定位平台型,不会出现类似BAT巨头
  7. 【线程控制:线程休眠】
  8. lintcode刷题 14. 二分查找,迭代和二分法Python实现
  9. 均匀分布(uniform distribution)期望的最大似然估计(maximum likelihood estimation)
  10. matlab基本函数的输入输出,Matlab函数的基本使用
  11. 重庆市计算机考试题库,重庆市计算机一级题库
  12. 全球及中国柔性石材行业研究及十四五规划分析报告
  13. 开源GIS(十八)——分辨率与比例尺
  14. ubuntu离线中文语音识别
  15. Java筑基34-网络编程02-UDP网络编程网络编程案例
  16. Web 自动化神器 TestCafe(二)—元素定位篇
  17. python中return返回值怎么累加_Python学习笔记函数之返回值和return语句
  18. 硬件安全技术——芯片安全设计技术2
  19. 在vue项目中使用高德地图
  20. 栈内存和堆内存的区别

热门文章

  1. Verilog设计实例(4)详解全类别加法器(一)
  2. 【FPGA】双端口RAM的设计(异步读写)
  3. 带通采样定理简单记录
  4. ChipScope Pro分析仪
  5. jvm 内存结构默写
  6. SaaS创业型企业如何打破销售瓶颈?
  7. 记一些css 3效果
  8. PostgreSQL在何处处理 sql查询之三十九
  9. perl dancer + net::ssh2监控服务器性能
  10. Hive动态分区导致的Jobtracker Hang