freopen (stdin stdout ) 詳解+例項
今天做USACO 用到了檔案的操作。 之前做USACO只是格式化的些 寫 freopen("xxx.in","r",stdin) 和"freopen("xxx.out","w",stdout)"
百度百科上是這麼介紹的:
函式名: freopen
功 能: 替換一個流,或者說重新分配檔案指標,實現重定向。如果stream流已經開啟,則先關閉該流。如果該流已經定向,則freopen將會清除該定向。此函式一般用於將一個指定的檔案開啟一個預定義的流:標準輸入、標準輸出或者標準出錯。 用 法: FILE *freopen(const char *filename,const char *type, FILE *stream);例1:
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- if(freopen("file.txt","w",stdout)==NULL)
- fprintf(stderr,"error\n");
- printf("This is in the file\n"); //這句話會在file.txt中顯示。
- fclose(stdout); //使用fclose()函式就可以把<a href="http://baike.baidu.com/view/266782.htm" target="_blank">緩衝區</a>內最後剩餘的資料輸出到磁碟檔案中,並釋放檔案指標和有關的緩衝區。
- return 0;
- }
例2:
- //首先在同路徑下建立一個in.txt文字文件寫入若干數字
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- freopen("in.txt","r",stdin); //從in.txt 中讀入資料
- freopen("out.txt","w",stdout); // 將最後資料寫入out.txt中
- int a,b;
- while(scanf("%d%d",&a,&b)!=EOF) //資料是從in.txt中輸入的
- printf("%d\n"
- fclose(stdin);
- fclose(stdout);
- return 0;
- }
freopen("CON","w",stdout) 表示在控制檯視窗上寫入資料;
例3:
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- // FILE *stream;
- freopen("file1.txt","w",stdout);
- printf("this is in file1.txt"); // 這句話在file1.txt中顯示
- freopen("CON","w",stdout);
- printf("And this is in command.\n"); //這句話在控制檯上顯示
- return 0;
- }
例5: 關於fread 可以通過下面的程式,一看就知道什麼意思了
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- FILE *stream
- char s[102400]="";
- if((stream=freopen("file.txt","r",stdin))==null)
- exit(-1);
- fread(s,1,1024,stdin); // 讀取file.txt中1到1024位,放入s中 ,我是這麼理解的
- printf("%s\n",s);
- return 0;
- }
使用的理由(範圍):如果輸入資料很龐大,需要一次又一次的重新輸入和除錯時可採用本函式。
freopen ()函式:
1.格式
FILE * freopen (constchar* filename,constchar* mode, FILE * stream );
2.引數說明
filename: 要開啟的檔名
mode: 檔案開啟的模式,和fopen中的模式(r/w)相同
stream: 檔案指標,通常使用標準流檔案(stdin/stdout/stderr)
返回值:成功,則返回一個path所指定檔案的指標;失敗,返回NULL。(一般可以不使用它的返回值) 功能:實現重定向,把預定義的標準流檔案定向到由path指定的檔案中。標準流檔案具體是指stdin、stdout和stderr。其中stdin是標準輸入流,預設為鍵盤;stdout是標準輸出流,預設為螢幕;stderr是標準錯誤流,一般把螢幕設為預設。通過呼叫freopen,就可以修改標準流檔案的預設值,實現重定向。
3.使用方法
因為檔案指標使用的是標準流檔案,因此我們可以不定義檔案指標。
接下來我們使用freopen()函式以只讀方式r(read)開啟輸入檔案slyar.in
freopen("slyar.in","r", stdin);
然後使用freopen()函式以寫入方式w(write)開啟輸出檔案slyar.out
freopen("slyar.out","w", stdout);
接下來的事情就是使用freopen()函式的優點了,我們不再需要修改scanf和printf,而是維持程式碼的原樣就可以了。因為freopen()函式重定向了標準流,使其指向前面指定的檔案。
最後只要使用fclose關閉輸入檔案和輸出檔案即可。
fclose(stdin);
fclose(stdout);
若要恢復控制代碼,可以重新開啟標準控制檯裝置檔案,只是這個裝置檔案的名字是與作業系統相關的。
DOS/Windows:
freopen("CON","r", stdin);
Linux:
freopen("/dev/console","r", stdin);
4.演算法實例
輸入一些整數,求出它們的最小值、最大值和平均值(保留3位小數)。輸入保證這些數都是不超過1000的整數。
樣例輸入:2 8 3 5 1 7 3 6
樣例輸出:1 8 4.375
參考程式1:
- #define TEST
- #include
- #define MM 1000
- main()
- {
- #ifdef TEST
- freopen("d:\\c2_4_in.txt","r",stdin);
- freopen("d:\\c2_4_out.txt","w",stdout);
- #endif
- int i=0,sum=0,n,max=-MM,min=MM;
- while(scanf("%d",&n)==1)
- {
- sum=sum+n;
- if(max<N)< SPAN>
- max=n;
- if(min>n)
- min=n;
- i++;
- }
- printf("%d %d %.3lf\n",min,max,(double)sum/i);
- }
說明:(1)對於本題來說,我們使用了重定向簡單地說,就是程式中用標準輸入scanf()函式輸入的資料從d:\c2_4_in.txt中讀取,printf()函式輸出的資料直接寫入d:\c2_4_out.txt中去,螢幕上不在等待輸入資料和不再顯示輸出結果。
(2)如果把第一句去掉(#define TEST),
#ifdef TEST
freopen("d:\\c2_4_in.txt","r",stdin);
freopen("d:\\c2_4_out.txt","w",stdout);
#endif
就不起任何作用,這時還必須用標準輸入輸出。
參考程式2:
-
相關推薦
freopen (stdin stdout ) 詳解+例項
今天做USACO 用到了檔案的操作。 之前做USACO只是格式化的些 寫 freopen("xxx.in","r",stdin) 和"freopen("xxx.out","w",stdout)" 百度百科上是這麼介紹的: 函式名: freopen 功 能: 替換一個流,或者說重新分配檔案指標,
java 的位運算子詳解例項 ------與(&) 、或( |) 、非( ~) 、異或( ^)
位運算子主要針對二進位制,它包括了:“與”、“非”、“或”、“異或”。從表面上看似乎有點像邏輯運算子,但邏輯運算子是針對兩個關係運算符來進行邏輯運算,而位運算子主要針對兩個二進位制數的位進行邏輯運算。下面詳細介紹每個位運算子。 1.與運算子 與運算子用符號“&”表示,
linux中alarm函式和pause函式詳解例項
轉載原文:https://www.cnblogs.com/yxk529188712/p/4982401.html alarm(time);執行之後告訴核心,讓核心在time秒時間之後向該程序傳送一個定時訊號,然後該程序捕獲該訊號並處理; pause()函式使該程序暫停讓出CPU,但是該函式的暫停
WebStorm + BootStrap 安裝 用 Tomcat 部署Web專案(圖文詳解 + 例項 )
WebStorm安裝和破解 1.官網下載 2.安裝
C++中的freopen()函式使用詳解
所謂重定向輸出,就是可以把原本只是輸出在控制檯的字元,輸出到你指定的路徑檔案中。(輸入類似,就是從指定的檔案中讀取,而不是讀取在控制檯中的輸入。)重定向函式可以在任何時候開啟、關閉。 函式名:freopen 標準宣告:FILE *freopen( const c
ajax引數詳解+例項
ajax很多時候都能用到,在網上看到了很多關於ajax引數的介紹,但是都沒有提供實際的詳解。來做個小總結以防不時之需。 1.url 要求為String型別的引數,(預設為當前頁地址)傳送請求的地址。 2.type 要求為String型別的引數,請求方式(post或ge
location 引數詳解 例項展示
location.href 設定或返回完整的 URL。在瀏覽器的位址列上怎麼顯示它就怎麼返回。 location.protocol:協議名.取值有'https:','https:','file:' 等等。 location.host=location.hostname+l
【轉】XML和Schema名稱空間詳解---例項篇
上文把XML和Schema的名稱空間的一些相關內容進行了詳細介紹,下面通過例子來具體瞭解: 例一:重點理解名稱空間的相關概念。 下面的例子是一個XML Schema檔案,名為"note.xsd" <?xml version="1.0"?>&
【Spring】定時任務詳解例項[email protected]
最近在做專案,時間比較緊張,也有比較久沒寫部落格了。 現在專案的Redis快取需要用到定時任務,就學習了一下Spring 的@Scheduled註解。使用起來很簡單。 這個例子是建立在之前我的一篇部落格的例項上面的。 也就是架好了SSM框架。 SSM
Java的位運算子詳解例項
Java的位運算子詳解例項——與(&)、非(~)、或(|)、異或(^) 位運算子主要針對二進位制,它包括了:“與”、“非”、“或”、“異或”。從表面上看似乎有點像邏輯運算子,但邏輯運算子是針對兩個關係運算符來進行邏輯運算,而位運算子主要針對兩個二進位制數的位進行邏輯運算。下面詳細
python閉包詳解+例項演示
轉載自:http://www.cnblogs.com/blueel/archive/2012/12/28/2837673.html “閉包”這個詞語相信大多數學過程式設計的同學並不陌生,但是有時候理解起來還是有一定難度。先看定義: 閉包是由函式和與其相關的引用環境組合而成
ORACLE函式之GREATEST函式詳解例項
1語法GREATEST(expr_1, expr_2, ...expr_n)2說明GREATEST(expr_1, expr_2, ...expr_n)函式從表示式(列、常量、計算值)expr_1, e
Delphi 中WebBrowser控制元件詳解例項
uses mshtml,IdHTTP;procedure TFrmmain.Act_BeginWrite;varmyitem:Olevariant;i:integer;tmp:string;TemName:String;TemIniFile:TIniFile;beginTrymyitem := WebBrow
Spring事務管理(詳解+例項)
寫這篇部落格之前我首先讀了《Spring in action》,之後在網上看了一些關於Spring事務管理的文章,感覺都沒有講全,這裡就將書上的和網上關於事務的知識總結一下,參考的文章如下: 1 初步理解 理解事務之前,先講一個你日常生活中最常乾的事:取錢
Java技術_基礎技術(0003)_類執行順序詳解+例項(阿里面試題)+詳細講解+流程圖
基礎技術: 對於java類各個成員的執行順序,現拿出阿里的面試題作為樣例(例子非常好,是用心出的題),在這裡重新說明一下java類執行順序的原則。 原始碼下載(包含題、結果、分析過程)
Java---DOM解析XML文件詳解例項
文件物件模型(Document Object Model,簡稱DOM)package cn.hncu.dom; import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml
uml類圖設計系統詳解例項
•什麼是類 面向物件思想 特例 抽象 •每個物件都扮演了一個角色,併為其它成員提供特定的服務或執行特定的行為。 •在面向物件世界中,行為的啟動是通過將“訊息”傳遞給對此行為負責的物件來完成的;同時還將伴隨著執行要求附上相關的資訊(引數);而收到該訊息的物件則會執行相應的“方法”來實現需求 •用
Mysql快捷鍵+經典Mysql語句大全完整版--詳解+例項
下列語句部分是Mssql語句,不可以在access中使用。 SQL分類: DDL—資料定義語言(CREATE,ALTER,DROP,DECLARE) DML—資料操縱語言(SELECT,DELETE,UPDATE,INSERT) DCL—資料控制語言(GRANT,REVOKE,COMMIT,ROLLB
XML和Schema名稱空間詳解---例項篇
上文把XML和Schema的名稱空間的一些相關內容進行了詳細介紹,下面通過例子來具體瞭解: 例一:重點理解名稱空間的相關概念。 下面的例子是一個XML Schema檔案,名為"not