为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
qq_笑_17 2019-07-08 16:44:18
如何将CIN和cout重定向到文件?我怎么才能重定向cin到in.txt和cout到out.txt?
查看完整描述

3 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

只管写

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


查看完整回答
反对 回复 2019-07-08
?
ibeautiful

TA贡献1993条经验 获得超5个赞

下面是一个用于隐藏CIN/cout的简短代码片段,用于编程竞赛:

#include <bits/stdc++.h>using namespace std;int main() {
    ifstream cin("input.txt");
    ofstream cout("output.txt");

    int a, b;   
    cin >> a >> b;
    cout << a + b << endl;}

这提供了额外的好处,即普通的fStreams比同步的Stdio流更快。但这只适用于单个函数的范围。

全局CIN/Cout重定向可以写为:

#include <bits/stdc++.h>using namespace std;void func() {
    int a, b;
    std::cin >> a >> b;
    std::cout << a + b << endl;}int main() {
    ifstream cin("input.txt");
    ofstream cout("output.txt");

    // optional performance optimizations    
    ios_base::sync_with_stdio(false);
    std::cin.tie(0);

    std::cin.rdbuf(cin.rdbuf());
    std::cout.rdbuf(cout.rdbuf());

    func();}

请注意ios_base::sync_with_stdio还重置std::cin.rdbuf..所以命令很重要。

另见IOS_base的意义:sync_with_stdio(False);cin.tie(NULL);

STDIO流对于单个文件的范围也很容易隐藏,这对于有竞争力的编程非常有用:

#include <bits/stdc++.h>using std::endl;std::ifstream cin("input.txt");std::ofstream cout("output.txt");int a, b;void read() {
    cin >> a >> b;}void write() {
    cout << a + b << endl;}int main() {
    read();
    write();}

但在这种情况下我们必须选择std逐个声明并避免using namespace std;因为它会产生歧义错误:

error: reference to 'cin' is ambiguous
     cin >> a >> b;
     ^note: candidates are: std::ifstream cin
    ifstream cin("input.txt");
             ^
    In file test.cpp
std::istream std::cin    extern istream cin;  /// Linked to standard input
                   ^

另见如何正确使用C+中的命名空间?为什么“使用命名空间STD”被认为是不好的做法?如何解决C+命名空间与全局函数之间的名称冲突?


查看完整回答
反对 回复 2019-07-08
  • 3 回答
  • 0 关注
  • 775 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信