這個對經常在oj上做題的童鞋們很有用。oj基本都是用標準輸入輸出(usaco除外)。但如果你在除錯的時候也都是從控制台輸入,那就太浪費寶貴的時間了。我們可以重定向標準輸入,除錯的時候從檔案讀,提交時從標準輸入讀。
在c語言中,方法比較簡單。使用函式freopen():
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
這樣就把標準輸入重定向到了data.in檔案,標準輸出重定向到了data.out檔案。
這兩句**之後,scanf函式就會從data.in檔案裡讀,而printf函式就會輸出到data.out檔案裡了。
c++中,對流重定向有兩個過載函式:
streambuf* rdbuf () const;
streambuf* rdbuf (streambuf *)
就相當於get/set方法。
streambuf *backup;
ifstream fin;
fin.open("data.in");
backup = cin.rdbuf(); // back up cin's streambuf
cin.rdbuf(fin.rdbuf()); // assign file's streambuf to cin
// ... cin will read from file
cin.rdbuf(backup); // restore cin's original streambuf
注意最後我們使用了cin.rdbuf(backup)把cin又重定向回了控制台
然而,如果用c語言實現同樣的功能就不那麼優雅了。
因為標準控制台裝置檔案的名字是與作業系統相關的。
在dos/windows中,名字是con
freopen("con", "r", stdin);
在linux中,控制台裝置是/dev/console
freopen("/dev/console", "r", stdin);
另外,在類unix系統中,也可以使用dup系統呼叫來預先複製乙份原始的stdin控制代碼。
輸入輸出重定向
使用標準輸入流,標準輸出流和標準錯誤流,這些標準流都被預分配給鍵盤和顯示器。在需要的時候,可以使用重定向臨時改變這些預設分配。重定向是這樣一種過程,我們借助它指定乙個用於替代某個 標準檔案的檔案。輸入重定向 可以將標準輸入從鍵盤重定向到任何文字檔案。輸入重定向運算子為小於號 意味著該命令從此給 派的...
輸入輸出重定向
1.標準輸入的控制 語法 命令 檔案將檔案做為命令的輸入。例如 mail s mail test wesongzhou hotmail.com file1 將檔案file1 當做信件的內容,主 題名稱為mail test,送給收信人。2.標準輸出的控制 語法 命令 檔案將命令的執行結果送至指定的檔案...
輸入輸出重定向
想象一下,當我們寫了個程式,開始是在命令列下執行的程式,後來用mfc之類的改寫為窗體程式,原先用printf輸出的trace都不可見了,但是我們又需要 輸出到檔案分析 怎麼辦?1 開始寫的時候你定義乙個mytrace的巨集 2 你可以把printf換成fprintf 3 使用輸出重定向。第一種情況很...