這個對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控制代碼。
Linux標準I O和重定向
執行乙個shell命令時,通常會自動開啟三個標準檔案,即標準輸入檔案 stdin 檔案描述符為0,通常對應終端的鍵盤 標準輸出檔案 stdout 檔案描述符為1和標準錯誤輸出檔案 stderr 檔案描述符為2,這兩個檔案都對應終端的螢幕。標準i o和重定向 ls,命令列讀取執行鍵盤敲擊的文字流 ls...
重定向標準輸出
各位看官,今天我們來聊聊標準io流的重定向問題。必須,在程式設計時會輸出大量資訊到螢幕上,非常不方便閱讀,我們可以通過對於標準輸出的重定向,從而使得閱讀更方便。主要涉及的方法為 setin inputstream setout printstream seterr printstream setin...
Linux Shell之IO重定向
一 io裝置 io是指資料的 端與資料的目的端,分別稱為標準輸入 標準輸出 及標準錯誤輸出。程式不必關心裝置的問題,無論是檔案 終端 磁帶機等。在linux預設情況下,會讀取標準輸入 寫入標準輸出,並將錯誤傳遞到標準錯誤輸出。預設情況下標準輸入 輸出 錯誤都是終端。通過下面可知 cat input ...