目录

相同和不同点

例子

fopen

freopen


相同和不同点

freopen 和 fopen 都是C的标准库函数被包含于C标准库头文件<stdio.h>中。

fopen就是我们最熟悉的打开一个文件用于写入or读取

freopen 是打开一个文件,用于接收输入输出流的数据。

freopen("xxx.in","r",stdin); //输入文件
freopen("xxx.out","w",stdout);  //输出文件

例子

fopen

FILE *fp1,*fp2; //定义文件指针类型
fp1=fopen("input.in","r"); //用fopen函数以只读方式(r)打开输入文件input.in;
fp2=fopen("output.out","w");//用fopen函数以写入方式(w)打开输出文件output.out;fscanf(fp1,"%d",&temp);//fscanf从文件中读取数据,fp1文件指针指定文件;
fprintf(fp2,"%d",temp);//fprintf将数据输出到文件,fp2文件指针指定文件;fclose(fp1);//关闭文件指针。
fclose(fp2);

freopen

#include<cstdio>
#include<iostream>
using namespace std;
int main()
{freopen("a+b.in","r",stdin);freopen("a+b.out","w",stdout);//以上是模板int a,b;cin>>a>>b;cout<<a+b<<endl;return 0;
}

此时,用户在屏幕上的输入(cin>>a>>b;),就会写入a+b.in文件。

标准输出流(cout<<a+b)就会写入a+b.out文件。

上面的程序运行的结果是:

参考或摘取:

http://t.csdn.cn/e3OZH

程序交互生成关机脚本的例子:

(摘自:http://t.csdn.cn/BP6I7)

#include<bits/stdc++.h>
#include <conio.h>
#include <windows.h>
using namespace std;
int main()
{system("color f0");//初始化控制台模样system("title 关机软件工厂");//同上关机软件工厂char c; cout<<"欢迎来到关机软件工厂,这里有各种各样的关机bat文件"<<endl;Sleep(1000) ;//暂停1秒,主要是让这个软件变得不那么突兀怪异cout<<"建议您作死前先制造一个放弃关机的文件,不然......后果自负"<<endl; Sleep(1000);cout<<endl<<"---------按键继续----------" ;c=getch();//读取(getch是不带回显,不带缓冲区的单个字符读入。system("cls"); //清屏cout<<"请问您需要什么关机文件?"<<endl<<endl; Sleep(1000) ;cout<<"请输入对应编号"<<endl<<"1.定时关机"<<endl<<"2.立即关机(慎用!!!)"<<endl<<"3.放弃关机"<<endl<<"4.注销"<<endl<<"5.重启(慎用,too!!!)"<<endl<<"其他.我不需要,谢谢";c=getch();//同上system("cls");//同上int a;if(c=='1'){cout<<"请问您需要定时多久关机?(请输入秒数)";cin>>a;system("cls");cout<<"搞定,您可以在当前文件夹下找到定时关机文件,再见" ;//因为这是在fropen之前的输出,所以会输出在控制台而不是文件中。freopen("定时关机.bat","w",stdout);//众所周知,可以用记事本输入一个shutdown在改变拓展名为bat改为批处理文件,然后便可实现关机。cout<<"shutdown -s -t "<<a;Sleep(1000) ;return 0;}if(c=='2') {system("cls");cout<<"搞定,您可以在当前文件夹下找到立即关机文件,再见";freopen("立即关机.bat","w",stdout);cout<<"shutdown -s";Sleep(1000) ;return 0; }if(c=='3') {system("cls");cout<<"搞定,您可以在当前文件夹下找到放弃关机文件,再见";freopen("放弃关机.bat","w",stdout);cout<<"shutdown -a";Sleep(1000) ;return 0; }if(c=='4') {system("cls");cout<<"搞定,您可以在当前文件夹下找到注销文件,再见";freopen("注销.bat","w",stdout);cout<<"shutdown -l";Sleep(1000) ;return 0; }system("cls");cout<<"好的,下次见!!!";Sleep(1000) ;return 0;
}

1. fopen()
  在C语言中遇到使用文件输入/输出的,最常见的可能就是它了吧。

  fopen调用的一般形式为:
  文件指针名=fopen(文件名,使用文件方式)

文件指针名,必须是FILE类型的指针变量;
文件名,被打开的文件名
使用文件方式,是文件的类型和操作要求,有如下几种:
r(read):只读;
w(write):只写;
a(append):追加;
t(text):文本文件,可省略;
b(binary):二进制文件。
+ :读和写
  打开方式由以上几种基本类型组合而成,注意:

r 打开文件,该文件必须存在,且只能从该文件读出;
w 打开文件只能想该文件写入。若文件不存在,则自动新建;若文件已存在,则删去原文件再新建
  这个函数的用法如下:

FILE *fp1,*fp2; //定义文件指针类型
fp1=fopen("input.in","r"); //用fopen函数以只读方式(r)打开输入文件input.in;
fp2=fopen("output.out","w");//用fopen函数以写入方式(w)打开输出文件output.out;

fscanf(fp1,"%d",&temp);//fscanf从文件中读取数据,fp1文件指针指定文件;
fprintf(fp2,"%d",temp);//fprintf将数据输出到文件,fp2文件指针指定文件;

fclose(fp1);//关闭文件指针。
fclose(fp2);

  在启用fopen函数时,需要特定的函数fscanf,fprintf对文件操作;普通的scanf和printf依然能在命令行界面操作。

2. freopen()
  freopen这个函数,在ACM中应用很广,因为ACM试题中可能有大量输入数据,程序运行往往不是一次成功的,每次运行都重新输入很浪费时间,因此freopen就可以解决测试数据的重复输入问题。

函数声明:

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

filename:要打开的文件名;
mode:文件打开的模式,和fopen中的模式(r/w)相同。
stream:文件指针,通常使用标准流文件(stdin/stdout/stderr)
使用方法:

freopen("data.in","r",stdin); 
freopen("data.out","w",stdout);

fclose(stdin);
fclose(stdout);

  freopen()函数重定向了标准流,使其指向指定文件,因此不需要修改scanf和printf。

  确实很方便吧,不过还有个问题要解决。通过freopen我们把标准流重定向到了指定文件,那么如果我们想让一些信息输出到屏幕,该怎么做呢?

  fopen函数由fprintf和printf两个函数,分别输出到文件和控制台。而freopen函数,需要修改函数的filename参数,让标准流输出到控制台。而这个控制台设备文件的名字与操作系统相关。

DOS、Win系统:

freopen("CON","r",stdin);
freopen("CON","w",stdout);

Linux:

freopen("/dev/console","r",stdin);

  这样就能实现一部分需要的数据输出到文件,同时另一部分数据输出到控制台。这样让程序拥有一些简单的交互能力。

原文链接:https://blog.csdn.net/XavierDarkness/article/details/80638641

【C/C++】freopen 函数和 fopen 函数|标准输入输入写入文件|屏幕输出写入文件相关推荐

  1. freopen 函数和 fopen 函数简单介绍

      偶然碰到了freopen这个函数,起初以为和fopen什么的一样,但是发现close后不能好好输出了.先说说fopen()吧. 1. fopen()   在C语言中遇到使用文件输入/输出的,最常见 ...

  2. C语言文件 open函数和fopen函数

    open 头文件: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> 定义函数: in ...

  3. open函数和fopen函数区别

    fopen是基于ANSIC标准C的的API open是UNIX系统的API的区别 这里重点运用fopen等ANSIC标准C的的API,open等UNIX系统的API可参考主页文章 1.层次不同 ope ...

  4. php fopen函数php,fopen函数介绍与使用方法详解

    在我们的PHP开发中会经常遇到fopen()和file_get_contents(),相信很多同学都发现这两个函数基本上都差不多,那么我们今天就来讲讲php fopen()和file_get_cont ...

  5. 函数:fopen的使用方法

    函数:fopen 函数原型:FILE * fopen(const char * path,const char * mode); 返回值:文件顺利打开后,指向该流的文件指针就会被返回.如果文件打开失败 ...

  6. python的fopen函数_打开文件fopen函数的用法

    在C语言中,对文件操作之前,首先需要打开文件,使用的函数是fopen函数,它的作用是打开文件,获取该文件的文件指针,方便后续操作.函数原型为:FILE *fopen(const char *filen ...

  7. 九、Linux文件 - fopen函数和fclose函数讲解

    目录 1.fopen函数 2.fclose函数 3.fopen函数和fclose实战 1.fopen函数 fopen fwrite fread fclose ...属于标准C库 include < ...

  8. php fopen函数

    php中没有单独的文件创建函数,如果我们想创建函数,可以使用fopen(),fopen()函数字面意思是打开文件,但该函数也有创建文件的功能,当使用 fopen() 函数打开一个文件时,如果文件不存在 ...

  9. linux c文件操作,C语言文件操作(FILE)与常用文件操作函数

    文件 1.文件基本概念 C程序把文件分为ASCII文件和二进制文件,ASCII文件又称文本文件,二进制文件和文本文件(也称ASCII码文件)二进制文件中,数值型数据是以二进制形式存储的, 而在文本文件 ...

最新文章

  1. 自定义堆栈(回文检测)
  2. 硅谷产品实战-总结:14、如何用数据做出产品决定?
  3. Linux脚本选题背景,shell实例100例《一》
  4. 1.2句柄及 WinMain函数
  5. php mysql installed_CentOS在使用yum install php-mysql安装php时报错的解决方法
  6. 前端应该掌握的网络知识(1)
  7. 存根类 测试代码 java_测试双打:模拟,假人和存根
  8. 计算机考试前的心情作文,考试时的心情作文(七篇)
  9. c语言如何赋值星期到字母,C语言程序设计课程教案.doc
  10. linux由众多微内核组成,什么是linux
  11. UIScrollView相关问题(计算分页)
  12. jq请求Ajax数据
  13. (转)Arcgis for JS之对象捕捉
  14. JavaScript学习(五十三)—借用构造方法继承
  15. Allegro给一个网络赋默认值,取消默认值
  16. 机器学习中的数据预处理方法与步骤
  17. 使用Excel处理姓名数据,转为拼音并且姓与名首字母大写
  18. 虚拟机内linux网络连接,vmware中redhat5虚拟机无法连接网络
  19. Android,iOS应用适配IPv6之网络配置
  20. imx6 android gadget,imx6q安卓启动失败显示Suspending console(s)(已解决)

热门文章

  1. 利用Django生成PDF文档
  2. 两级式单相光伏发电系统双闭环控制设计仿真
  3. VAN:Visual Attention Network
  4. AAMA 2604 铝型材和板材上的高性能有机涂层的推荐规范、性能要求和测试方法
  5. Ant Design Mobile 5.6.0版本来了
  6. 三天打鱼两天晒网问题(C++)
  7. 新浪导航(html+css)
  8. 物流里程 | 使用EXCEL制作物流配送城市里程表
  9. 支付宝小程序使用阿里图标库
  10. string教程c语言,C++ string类详解