freopen
當(dāng)我們求解acm題目時(shí),通常在設(shè)計(jì)好算法和程序后,要在調(diào)試環(huán)境(例如VC等)中運(yùn)行程序,輸入測(cè)試數(shù)據(jù),當(dāng)能得到正確運(yùn)行結(jié)果后,才將程序提交到oj中。但由于調(diào)試往往不能一次成功,每次運(yùn)行時(shí),都要重新輸入一遍測(cè)試數(shù)據(jù),對(duì)于有大量輸入數(shù)據(jù)的題目,輸入數(shù)據(jù)需要花費(fèi)大量時(shí)間。 使用freopen函數(shù)可以解決測(cè)試數(shù)據(jù)輸入問(wèn)題,避免重復(fù)輸入,不失為一種簡(jiǎn)單而有效的解決方法。 函數(shù)名:freopen
聲明:FILE *freopen( const char *path, const char *mode, FILE *stream );
所在文件: stdio.h
參數(shù)說(shuō)明:
path: 文件名,用于存儲(chǔ)輸入輸出的自定義文件名。
mode: 文件打開的模式。和fopen中的模式(如r-只讀, w-寫)相同。
stream: 一個(gè)文件,通常使用標(biāo)準(zhǔn)流文件。
返回值:成功,則返回一個(gè)path所指定文件的指針;失敗,返回NULL。(一般可以不使用它的返回值)
功能:實(shí)現(xiàn)重定向,把預(yù)定義的標(biāo)準(zhǔn)流文件定向到由path指定的文件中。標(biāo)準(zhǔn)流文件具體是指stdin、stdout和stderr。其中stdin是標(biāo)準(zhǔn)輸入流,默認(rèn)為鍵盤;stdout是標(biāo)準(zhǔn)輸出流,默認(rèn)為屏幕;stderr是標(biāo)準(zhǔn)錯(cuò)誤流,一般把屏幕設(shè)為默認(rèn)。 下面以在VC下調(diào)試“計(jì)算a+b”的程序舉例。
C語(yǔ)法:
#include <stdio.h>
int main()
{
int a,b;
freopen("debug\\in.txt","r",stdin); //輸入重定向,輸入數(shù)據(jù)將從in.txt文件中讀取
freopen("debug\\out.txt","w",stdout); //輸出重定向,輸出數(shù)據(jù)將保存在out.txt文件中
while(scanf("%d %d",&a,&b)!=EOF)
printf("%d\n",a+b);
fclose(stdin);//關(guān)閉文件
fclose(stdout);//關(guān)閉文件
return 0;
} C++語(yǔ)法
#include <stdio.h>
#include <iostream.h>
int main()
{
int a,b;
freopen("debug\\in.txt","r",stdin); //輸入重定向,輸入數(shù)據(jù)將從in.txt文件中讀取
freopen("debug\\out.txt","w",stdout); //輸出重定向,輸出數(shù)據(jù)將保存在out.txt文件中
while(cin>>a>>b)
cout<<a+b<<endl; // 注意使用endl
fclose(stdin);//關(guān)閉文件
fclose(stdout);//關(guān)閉文件
return 0;
}
freopen("debug\\in.txt","r",stdin)的作用就是把標(biāo)準(zhǔn)輸入流stdin重定向到debug\\in.txt文件中,這樣在用scanf或是用cin輸入時(shí)便不會(huì)從標(biāo)準(zhǔn)輸入流讀取數(shù)據(jù),而是從in.txt文件中獲取輸入。只要把輸入數(shù)據(jù)事先粘貼到in.txt,調(diào)試時(shí)就方便多了。 類似的,freopen("debug\\out.txt","w",stdout)的作用就是把stdout重定向到debug\\out.txt文件中,這樣輸出結(jié)果需要打開out.txt文件查看。 需要說(shuō)明的是: 1. 在freopen("debug\\in.txt","r",stdin)中,將輸入文件in.txt放在文件夾debug中,文件夾debug是在VC中建立工程文件時(shí)自動(dòng)生成的調(diào)試文件夾。如果改成freopen("in.txt","r",stdin),則in.txt文件將放在所建立的工程文件夾下。in.txt文件也可以放在其他的文件夾下,所在路徑寫正確即可。 2. 可以不使用輸出重定向,仍然在控制臺(tái)查看輸出。 3. 程序調(diào)試成功后,提交到oj時(shí)不要忘記把與重定向有關(guān)的語(yǔ)句刪除。
總結(jié)
- 上一篇: 面试题:利用一个栈倒序另外一个栈中的数
- 下一篇: 【做事必须搞清10个顺序】