C/C++ IO重定向

匿名 (未验证) 提交于 2019-12-03 00:03:02

转载,原始出处未知。


这个对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  

然而,如果用C语言实现同样的功能就不那么优雅了。

因为标准控制台设备文件的名字是与操作系统相关的。

在Dos/Windows中,名字是con

freopen("con", "r", stdin);

在Linux中,控制台设备是/dev/console

freopen("/dev/console", "r", stdin);

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!