freopen是被包含于C标准库头文件<stdio.h>中的一个函数,用于重定向输入输出流。该函数可以在不改变代码原貌的情况下改变输入输出环境。

C99函数声明:
FILE *freopen(const char * restrict filename, const char * restrict mode, FILE * restrict stream);
形参说明:
filename:需要重定向到的文件名或文件路径。
mode:代表文件访问权限的字符串。例如,"r"表示“只读访问”、"w"表示“只写访问”、"a"表示“追加写入”。
stream:需要被重定向的文件流。
返回值:如果成功,则返回该指向该输出流的文件指针,否则返回为NULL。
#include <stdio.h>
int main(void)
{
/* redirect standard output to a file */
if(freopen("D:\\output.txt", "w", stdout) == NULL)
fprintf(stderr,"error redirecting stdout\n");
/* this output will go to a file */
printf("This will go into a file.\n");
/*close the standard output stream*/
fclose(stdout);
return 0;
}

  

再看一个例子,在D盘的目录下,新建立一个文件,把一串数字写入到文件中去:

#include <stdio.h>
int main(void)
{
int i;
if (freopen ("D:\\output.txt", "w", stdout) == NULL)
fprintf(stderr, "error redirecting stdout\n");
for (i = 0; i < 10; i++)
printf("%3d", i);
printf("\n");
fclose(stdout);
return 0;
}

  编译运行一下,你会发现,十个数输出到了D盘根目录下文本文件output.txt中

#include <stdio.h>
int main(void)
{
int a, b;
freopen("in.txt","r",stdin);
/* 如果in.txt不在连接后的exe的目录,需要指定路径如D:\\in.txt */
freopen("out.txt","w",stdout);
while (scanf("%d%d", &a, &b) != EOF)
printf("%d\n",a+b);
fclose(stdin);
fclose(stdout);
return 0;
}

  从文件in.txt中读入数据,计算相邻两个数的加和输出到out.txt中

由于这里面用到了scanf这个函数,这里有必要说一下:

scanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。
如:
scanf("%d %d",&a,&b);
如果a和b都被成功读入,那么scanf的返回值就是2
如果只有a被成功读入,返回值为1
如果a和b都未被成功读入,返回值为0
如果遇到错误或遇到end of file,返回值为EOF。
且返回值为int型。
 
&a,&b,&c中的&是地址运算符,&a指a在内存中的地址。scanf的作用是:按照a,b,c的内存地址将输入的数据存到a,b,c中去。变量a,b,c的地址是在编译连续阶段分配的(存储顺序由编译器决定)。
这里注意:如果scanf中%d是连着写的如“%d%d%d”,在输入数据时,数据之间不可以加逗号,只能是空格或tab键或者回车键——“2 3 4” 或 “2(按tab)3(按tab)4(按tab)”。若是“%d,%d,%d”,则在输入数据时需要加“,”,如“2,3,4”。

最新文章

  1. PyCharm断点调试django
  2. 【小白的CFD之旅】02 江小白
  3. 【HDU 2853】 KM算法
  4. 用Eclipse运行Android版APP(PhoneGap)时出现:Unable to execute dex: Multiple dex files define
  5. Apache+PHP+Mysql 集成环境 几个软件pk
  6. Eclipse中遇到The type XXX cannot be resolved. It is indirectly referenced from required .class files错误
  7. 【C#】索引器
  8. 如何评价微信小程序?
  9. JavaScript学习笔记 -- ES6学习(三) 变量的解构赋值
  10. hdu 4585 Shaolin_set用法
  11. java实现各种数据统计图(柱形图,饼图,折线图)
  12. Sencha Touch 2 在MAC下详细的开发流程
  13. Akka(29): Http:Server-Side-Api,Low-Level-Api
  14. 将 Net 项目升级 Core项目经验:(三)迁移后的Net Standard版本的类库测试和多平台项目实测
  15. vue-axios的application/x-www-form-urlencod的post请求无法解析参数
  16. require/exports 与 import/export 的区别?
  17. F#周报2018年第49期
  18. Android 音视频深入 五 完美的录视频(附源码下载)
  19. CentOS SVN客户端应用
  20. redis在Linux下的远程连接

热门文章

  1. HDU 5716 带可选字符的多字符串匹配(ShiftAnd)
  2. ubuntu15.04下编译 libvirt
  3. Android_按钮被按下效果的实现(selector选择器)
  4. 教你爱上Blocks(闭包)
  5. 关于ECMAScript6一些知识
  6. 全球最快的JS模板引擎
  7. matlab GUI之常用对话框(四)-- 输入对话框 inputdlg、目录对话框 uigetdir、列表对话框 listdlg
  8. malloc 申请得到的内存后,再 free 释放它的时候,操作系统会立即收回那块内存吗?
  9. Convert Sorted Array to Balanced Binary Search Tree (BST)
  10. BZOJ 1021: [SHOI2008]Debt 循环的债务( dp )