如何在c ++中的不同函数中实现重定向stdin?

时间:2014-03-04 11:19:23

标签: c++ redirect iostream

在acm测试中我想将stdin中的stdin重定向到文件“in.txt”但由于std :: istream cin和std :: ifstream cin的冲突而无法编译,如何实现它取消“使用命名空间”;

#include<iostream>
#include<fstream>
using namespace std;
ifstream cin("in.txt");
int a,b,c;
void read(){
cin>>a>>b;
}
int main(){
cin>>c;
cout<<a<<b<<c;
}

2 个答案:

答案 0 :(得分:1)

最好的方法是更改​​函数以将其输入流作为参数。尽可能少地依赖全局变量(例如std::cin)通常是一个好主意:

#include <fstream>
#include <iostream>

int a, b, c;

void read(std::istream &in)
{
  in >> a >> b;
}


int main()
{
  std::cin >> c;
  std::ifstream f("in.txt");
  read(f);
  std::cout << a << b << c;
}

关于全局变量的注释同样适用于abc,但我认为这些是作为发布的示例引入的。

还请记住,在实际代码中,您应始终检查输入是否成功,如下所示:

bool read(std::istream &in, int &a, int &b)
{
  if (!(in >> a))
    return false;
  if (!(in >> b))
    return false;
  return true;
}

答案 1 :(得分:0)

#include<iostream>
#include<fstream>

std::ifstream cin("in.txt");
int a,b,c;
   void read(){
   std::cin>>a>>b;
}
int main(){
   cin>>c;
   read();
   std::cout<<a<<b<<c;
}

但这不是好习惯......