博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C/C++ 标准输入输出重定向
阅读量:6090 次
发布时间:2019-06-20

本文共 1164 字,大约阅读时间需要 3 分钟。

转载自:http://www.cnblogs.com/hjslovewcl/archive/2011/01/10/2314356.html

这个对经常在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方法。

 

代码示例:

1 #include 
2 #include
3 #include
4 5 using namespace std; 6 7 int main(){ 8 string str; 9 /*不同的string头文件不一定都支持getline(cin,string);10 char a[100];11 cin>>a;12 cout<
<
>str; /*有空格就会停止*/20 getline(cin, str); /*直到换行符处才停止*/21 cout<
<
>str;31 cout<
<<'!'<

 

注意最后我们使用了cin.rdbuf(backup)把cin又重定向回了控制台

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

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

在Dos/Windows中,名字是con

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

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

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

另外,在类unix系统中,也可以使用dup系统调用来预先复制一份原始的stdin句柄。

 

转载于:https://www.cnblogs.com/AbcFly/p/6239287.html

你可能感兴趣的文章
Botvac清洁机器人:智能操控 精致吸尘
查看>>
Nature机器学习子刊被指开历史倒车,Jeff Dean等数百名学者联名抵制
查看>>
提升人工智能效率 量子计算比经典算法节省时间
查看>>
比起VR高端设备市场,三星或对移动VR平台更感兴趣
查看>>
无需编程操作和视觉系统,这款机器人就可灵活若蛇
查看>>
为什么量子力学和相对论有矛盾?超弦理论或将统一物理学
查看>>
wireshark解析自定义的protobuf协议
查看>>
如何处理CloudFoundry应用部署时遇到的254错误
查看>>
Lua模块的加载与内存释放
查看>>
受企业级客户和云服务提供商推动, Veeam第一季度业绩又获增长
查看>>
区块链应用 | 2018年区块链将步入实际应用阶段,区块链经济将重构商业逻辑
查看>>
面试中关于Java虚拟机(jvm)的问题看这篇就够了
查看>>
锐捷网络国际合作伙伴大会召开,“3+2+1”战略布局全球市场
查看>>
多隆:淘宝第一行代码撰写者的程序世界
查看>>
DRDS到MaxCompute(原ODPS)数据归档性能优化测试
查看>>
FastDFS安装配置
查看>>
DllMain和多线程死锁
查看>>
走进太平洋保险集团 ——信息化系统运维专场活动沙龙圆满举行
查看>>
里德•哈斯廷斯表示并不担心人工智能威胁人类
查看>>
URL中的特殊字符
查看>>