如何将CIN和cout重定向到文件?

如何将CIN和cout重定向到文件?

我怎么才能重定向cinin.txtcoutout.txt?


qq_笑_17
浏览 776回答 3
3回答

温温酱

只管写#include&nbsp;<cstdio>#include&nbsp;<iostream>using&nbsp;namespace&nbsp;std;int&nbsp;main(){ &nbsp;&nbsp;&nbsp;&nbsp;freopen("output.txt","w",stdout); &nbsp;&nbsp;&nbsp;&nbsp;cout<<"write&nbsp;in&nbsp;file"; &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;}

ibeautiful

下面是一个用于隐藏CIN/cout的简短代码片段,用于编程竞赛:#include&nbsp;<bits/stdc++.h>using&nbsp;namespace&nbsp;std;int&nbsp;main()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;ifstream&nbsp;cin("input.txt"); &nbsp;&nbsp;&nbsp;&nbsp;ofstream&nbsp;cout("output.txt"); &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;a,&nbsp;b;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;>>&nbsp;a&nbsp;>>&nbsp;b; &nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;<<&nbsp;a&nbsp;+&nbsp;b&nbsp;<<&nbsp;endl;}这提供了额外的好处,即普通的fStreams比同步的Stdio流更快。但这只适用于单个函数的范围。全局CIN/Cout重定向可以写为:#include&nbsp;<bits/stdc++.h>using&nbsp;namespace&nbsp;std;void&nbsp;func()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;a,&nbsp;b; &nbsp;&nbsp;&nbsp;&nbsp;std::cin&nbsp;>>&nbsp;a&nbsp;>>&nbsp;b; &nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;<<&nbsp;a&nbsp;+&nbsp;b&nbsp;<<&nbsp;endl;}int&nbsp;main()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;ifstream&nbsp;cin("input.txt"); &nbsp;&nbsp;&nbsp;&nbsp;ofstream&nbsp;cout("output.txt"); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;optional&nbsp;performance&nbsp;optimizations&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;ios_base::sync_with_stdio(false); &nbsp;&nbsp;&nbsp;&nbsp;std::cin.tie(0); &nbsp;&nbsp;&nbsp;&nbsp;std::cin.rdbuf(cin.rdbuf()); &nbsp;&nbsp;&nbsp;&nbsp;std::cout.rdbuf(cout.rdbuf()); &nbsp;&nbsp;&nbsp;&nbsp;func();}请注意ios_base::sync_with_stdio还重置std::cin.rdbuf..所以命令很重要。另见IOS_base的意义:sync_with_stdio(False);cin.tie(NULL);STDIO流对于单个文件的范围也很容易隐藏,这对于有竞争力的编程非常有用:#include&nbsp;<bits/stdc++.h>using&nbsp;std::endl;std::ifstream&nbsp;cin("input.txt");std::ofstream&nbsp;cout("output.txt");int&nbsp;a,&nbsp;b;void&nbsp;read()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;>>&nbsp;a&nbsp;>>&nbsp;b;}void&nbsp;write()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;<<&nbsp;a&nbsp;+&nbsp;b&nbsp;<<&nbsp;endl;}int&nbsp;main()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;read(); &nbsp;&nbsp;&nbsp;&nbsp;write();}但在这种情况下我们必须选择std逐个声明并避免using namespace std;因为它会产生歧义错误:error:&nbsp;reference&nbsp;to&nbsp;'cin'&nbsp;is&nbsp;ambiguous &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;>>&nbsp;a&nbsp;>>&nbsp;b; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;^note:&nbsp;candidates&nbsp;are:&nbsp;std::ifstream&nbsp;cin &nbsp;&nbsp;&nbsp;&nbsp;ifstream&nbsp;cin("input.txt"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;^ &nbsp;&nbsp;&nbsp;&nbsp;In&nbsp;file&nbsp;test.cpp std::istream&nbsp;std::cin&nbsp;&nbsp;&nbsp;&nbsp;extern&nbsp;istream&nbsp;cin;&nbsp;&nbsp;///&nbsp;Linked&nbsp;to&nbsp;standard&nbsp;input &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;^另见如何正确使用C+中的命名空间?,&nbsp;为什么“使用命名空间STD”被认为是不好的做法?和如何解决C+命名空间与全局函数之间的名称冲突?
打开App,查看更多内容
随时随地看视频慕课网APP