大家好,欢迎来到IT知识分享网。
目录
相同和不同点
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; }
函数声明:
确实很方便吧,不过还有个问题要解决。通过freopen我们把标准流重定向到了指定文件,那么如果我们想让一些信息输出到屏幕,该怎么做呢?
fopen函数由fprintf和printf两个函数,分别输出到文件和控制台。而freopen函数,需要修改函数的filename参数,让标准流输出到控制台。而这个控制台设备文件的名字与操作系统相关。
DOS、Win系统:
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/111405.html
