如何在 C++ 中的不同函数中实现重定向标准输入

how to implement redirection stdin in different functions in c++?

本文关键字:函数 实现 重定向 标准输入 C++      更新时间:2023-10-16

在 acm 测试中,我想将不同乐趣中的 stdin 重定向到归档"in.txt",但由于 std::istream cin 和 std::ifstream cin 的冲突,它无法编译,如何在不取消"使用命名空间 out"的情况下实现它;

#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;
}

最好的方法是更改函数以将其输入流作为参数。通常,尽可能少地依赖全局变量(例如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;
}
#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;
}

但这不是好习惯...