博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
重定向输入输出流--freopen
阅读量:5905 次
发布时间:2019-06-19

本文共 1836 字,大约阅读时间需要 6 分钟。

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 
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 
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 
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”。

转载于:https://www.cnblogs.com/stemon/p/4595624.html

你可能感兴趣的文章
Developing a Service Provider using Java API(Service Provider Interface)(转)
查看>>
oschina程序开发
查看>>
nested exception is java.lang.NoClassDefFoundError: net/sf/cglib/proxy/CallbackFilter
查看>>
“正在注册字体”问题解决
查看>>
iOS开发-OpenGL ES入门教程1
查看>>
Java 设计模式专栏
查看>>
使用ASP.NET Atlas SortBehavior实现客户端排序
查看>>
图像滤镜处理算法:灰度、黑白、底片、浮雕
查看>>
Office文档出错的几种原因与解决方法
查看>>
正则表达式 学习笔记1.1
查看>>
AssetBundle进阶内存优化(Unity 4.x)
查看>>
《从零开始学Swift》学习笔记(Day 40)——析构函数
查看>>
Exchange2003-2010迁移系列之十,Exchange证书攻略
查看>>
extmail集群的邮件负载均衡方案 [lvs dns postfix]
查看>>
更改UIView的背景
查看>>
APUE第15章学习扎记之程序的存储区布局试验
查看>>
ubuntu升级16.04 inter idea 中文输入法无效
查看>>
三目运算判断jsp脚本里面的值
查看>>
sshtunnel在本地访问云服务器mysql
查看>>
小蚂蚁学习APP接口开发(1)—— json方式封装通信接口
查看>>