【C/C++】freopen 函数和 fopen 函数|标准输入输入写入文件|屏幕输出写入文件
目录
相同和不同点
例子
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 函数|标准输入输入写入文件|屏幕输出写入文件相关推荐
- freopen 函数和 fopen 函数简单介绍
偶然碰到了freopen这个函数,起初以为和fopen什么的一样,但是发现close后不能好好输出了.先说说fopen()吧. 1. fopen() 在C语言中遇到使用文件输入/输出的,最常见 ...
- C语言文件 open函数和fopen函数
open 头文件: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> 定义函数: in ...
- open函数和fopen函数区别
fopen是基于ANSIC标准C的的API open是UNIX系统的API的区别 这里重点运用fopen等ANSIC标准C的的API,open等UNIX系统的API可参考主页文章 1.层次不同 ope ...
- php fopen函数php,fopen函数介绍与使用方法详解
在我们的PHP开发中会经常遇到fopen()和file_get_contents(),相信很多同学都发现这两个函数基本上都差不多,那么我们今天就来讲讲php fopen()和file_get_cont ...
- 函数:fopen的使用方法
函数:fopen 函数原型:FILE * fopen(const char * path,const char * mode); 返回值:文件顺利打开后,指向该流的文件指针就会被返回.如果文件打开失败 ...
- python的fopen函数_打开文件fopen函数的用法
在C语言中,对文件操作之前,首先需要打开文件,使用的函数是fopen函数,它的作用是打开文件,获取该文件的文件指针,方便后续操作.函数原型为:FILE *fopen(const char *filen ...
- 九、Linux文件 - fopen函数和fclose函数讲解
目录 1.fopen函数 2.fclose函数 3.fopen函数和fclose实战 1.fopen函数 fopen fwrite fread fclose ...属于标准C库 include < ...
- php fopen函数
php中没有单独的文件创建函数,如果我们想创建函数,可以使用fopen(),fopen()函数字面意思是打开文件,但该函数也有创建文件的功能,当使用 fopen() 函数打开一个文件时,如果文件不存在 ...
- linux c文件操作,C语言文件操作(FILE)与常用文件操作函数
文件 1.文件基本概念 C程序把文件分为ASCII文件和二进制文件,ASCII文件又称文本文件,二进制文件和文本文件(也称ASCII码文件)二进制文件中,数值型数据是以二进制形式存储的, 而在文本文件 ...
最新文章
- 自定义堆栈(回文检测)
- 硅谷产品实战-总结:14、如何用数据做出产品决定?
- Linux脚本选题背景,shell实例100例《一》
- 1.2句柄及 WinMain函数
- php mysql installed_CentOS在使用yum install php-mysql安装php时报错的解决方法
- 前端应该掌握的网络知识(1)
- 存根类 测试代码 java_测试双打:模拟,假人和存根
- 计算机考试前的心情作文,考试时的心情作文(七篇)
- c语言如何赋值星期到字母,C语言程序设计课程教案.doc
- linux由众多微内核组成,什么是linux
- UIScrollView相关问题(计算分页)
- jq请求Ajax数据
- (转)Arcgis for JS之对象捕捉
- JavaScript学习(五十三)—借用构造方法继承
- Allegro给一个网络赋默认值,取消默认值
- 机器学习中的数据预处理方法与步骤
- 使用Excel处理姓名数据,转为拼音并且姓与名首字母大写
- 虚拟机内linux网络连接,vmware中redhat5虚拟机无法连接网络
- Android,iOS应用适配IPv6之网络配置
- imx6 android gadget,imx6q安卓启动失败显示Suspending console(s)(已解决)