freopen是被包含於c標準庫標頭檔案中的乙個函式,用於重定向輸入輸出流。該函式可以在不改變**原貌的情況下改變輸入輸出環境。
c99函式宣告:
file *freopen(const char * restrict filename, const char * restrict mode, file * restrict stream);
形參說明:
filename:需要重定向到的檔名或檔案路徑。
mode:代表檔案訪問許可權的字串。例如,"r"表示「唯讀訪問」、"w"表示「只寫訪問」、"a"表示「追加寫入」。
stream:需要被重定向的檔案流。
返回值:如果成功,則返回該指向該輸出流的檔案指標,否則返回為null。
#include int main(void)
再看乙個例子,在d盤的目錄下,新建立乙個檔案,把一串數字寫入到檔案中去:
#include int main(void)
編譯執行一下,你會發現,十個數輸出到了d盤根目錄下文字檔案output.txt中
#include int main(void)
從檔案in.txt中讀入資料,計算相鄰兩個數的加和輸出到out.txt中
由於這裡面用到了scanf這個函式,這裡有必要說一下:
scanf()函式返回成功賦值的資料項數,讀到檔案末尾出錯時則返回eof。
如:
scanf("%d %d",&a,&b);
如果a和b都被成功讀入,那麼scanf的返回值就是2
如果只有a被成功讀入,返回值為1
如果a和b都未被成功讀入,返回值為0
如果遇到錯誤或遇到end of file,返回值為eof。
且返回值為int型。
&a,&b,&c中的&是位址運算子,&a指a在記憶體中的位址。scanf的作用是:按照a,b,c的記憶體位址將輸入的資料存到a,b,c中去。變數a,b,c的位址是在編譯連續階段分配的(儲存順序由編譯器決定)。
這裡注意:如果scanf中%d是連著寫的如「%d%d%d」,在輸入資料時,資料之間不可以加逗號,只能是空格或tab鍵或者回車鍵——「2 3 4」 或 「2(按tab)3(按tab)4(按tab)」。若是「%d,%d,%d」,則在輸入資料時需要加「,」,如「2,3,4」。
使用freopen重定向輸入輸出流
在做acm演算法題目時,經常需要測試大量輸入資料。freopen函式可用於演算法本地除錯,等演算法執行正確後便可將 提交系統。freopen函式的主要功能是將預定義的標準流檔案定向到由path指定的檔案中。file freopen const char path,const char mode,fi...
重定向輸入輸出流freopen函式
乙個acm題目的解決背後隱藏著大量的測試,只有自己覺得把自己所能夠想到的一切可能都進行輸入測試並得到正確答案時才敢嘗試提交,畢竟在acm比賽中是會進行罰時的,寧可多測試幾次也不敢武斷提交。然而多數題目光測試資料就已經很多了,如果測試時一次一次手動輸入那將要耗費大量的時間,將要大大降低a題效率,這時候...
輸入輸出重定向
使用標準輸入流,標準輸出流和標準錯誤流,這些標準流都被預分配給鍵盤和顯示器。在需要的時候,可以使用重定向臨時改變這些預設分配。重定向是這樣一種過程,我們借助它指定乙個用於替代某個 標準檔案的檔案。輸入重定向 可以將標準輸入從鍵盤重定向到任何文字檔案。輸入重定向運算子為小於號 意味著該命令從此給 派的...