C語言中輸入輸出重定,freopen()妙用。
使用的理由(範圍):如果輸入資料很龐大,需要一次又一次的重新輸入和除錯時可採用本函式。
freopen ()函式:
1.格式
FILE * freopen ( const char * filename, const char * 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
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:
#include
#define MM 1000
main()
{
FILE *fin,*fout;
fin=fopen("d:\\c2_4_in.txt","rb");
fout=fopen("d:\\c2_4_out.txt","wb");
int i=0,n,sum=0,max=-MM,min=MM;
while(fscanf(fin,"%d",&n)==1)
{
sum+=n;
if(max max=n;
if(min>n)
min=n;
i++;
}
fprintf(fout,"%d %d %.3lf",min,max,(double)sum/i);
fclose(fin);
fclose(fout);
}
相關文章
- C語言輸入輸出C語言
- C語言之輸入輸出C語言
- c語言中資料的格式化輸出C語言
- c語言中%f輸出double型和float型值C語言
- 【C++】輸入輸出C++
- C語言_輸入輸出函式_PAGE5C語言函式
- Go 語言中的格式化輸出Go
- 入門輸出Hello World!——C語言C語言
- R語言中繪圖設定不輸出繪圖內容R語言繪圖
- 解決vscode c語言中scanf函式的輸入問題VSCodeC語言函式
- C語言輸入一個數輸出對應的值C語言
- 重學java中的輸入輸出流Java
- 輸入和輸出基礎語法
- C語言中以字串形式輸出列舉變數C語言字串變數
- 在c語言中輸出8進位制數,16進位制數C語言
- 實驗1 C語言輸入輸出和簡單程式編寫C語言
- 輸入輸出
- C語言中寫一個程式將浮點型轉化成字元型輸出C語言字元
- C++輸入輸出常用格式(cin,cout,stringstream)C++
- 實驗1_C語言輸入輸出和簡單程式編寫C語言
- 輸入輸出流
- C語言輸出多位小數C語言
- C++ 學習筆記之——輸入和輸出C++筆記
- 瞭解下C# 檔案的輸入與輸出C#
- Java 輸入輸出流Java
- 1.輸入輸出
- 輸入輸出系統
- shell——shell輸入輸出
- linux中的輸入與輸出管理(重定向輸入,輸出,管道符)Linux
- C# 的輸入輸出,(同一行/換行)C#
- C++名稱空間、標準輸入輸出、引用C++
- 用C語言輸出蛇形矩陣C語言矩陣
- C語言清空輸入緩衝區C語言
- c語言:輸入任意10個正整數,按照升序排序輸出:(冒泡演算法)C語言排序演算法
- 實驗1_C語言輸入輸出和簡單程式應用程式設計C語言程式設計
- C語言資料型別、變數的輸入和輸出、進位制轉換C語言資料型別變數
- C++ 資料輸入cin (解決CLoin輸入中文程式出錯)C++
- Java —— 標準輸入輸出Java
- 資料的輸入輸出