這個對經(jīng)常在OJ上做題的童鞋們很有用。OJ基本都是用標(biāo)準(zhǔn)輸入輸出(USACO除外),。但如果你在調(diào)試的時候也都是從控制臺輸入,,那就太浪費(fèi)寶貴的時間了。我們可以重定向標(biāo)準(zhǔn)輸入,,調(diào)試的時候從文件讀,,提交時從標(biāo)準(zhǔn)輸入讀。 在C語言中,,方法比較簡單,。使用函數(shù)freopen():
這樣就把標(biāo)準(zhǔn)輸入重定向到了data.in文件,標(biāo)準(zhǔn)輸出重定向到了data.out文件,。 這兩句代碼之后,,scanf函數(shù)就會從data.in文件里讀,而printf函數(shù)就會輸出到data.out文件里了,。 C++中,,對流重定向有兩個重載函數(shù):
就相當(dāng)于get/set方法。
注意最后我們使用了cin.rdbuf(backup)把cin又重定向回了控制臺 然而,,如果用C語言實現(xiàn)同樣的功能就不那么優(yōu)雅了,。 因為標(biāo)準(zhǔn)控制臺設(shè)備文件的名字是與操作系統(tǒng)相關(guān)的。 在Dos/Windows中,,名字是con freopen("con", "r", stdin); 在Linux中,,控制臺設(shè)備是/dev/console freopen("/dev/console", "r", stdin); 另外,在類unix系統(tǒng)中,,也可以使用dup系統(tǒng)調(diào)用來預(yù)先復(fù)制一份原始的stdin句柄,。 |
|