如何在 C++ 中的不同函数中实现重定向标准输入
how to implement redirection stdin in different functions in c++?
在 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;
}
关于全局变量的评论同样适用于a
、b
和c
,但我认为这些是作为发布示例引入的。
还请记住,在实际代码中,您应该始终检查输入是否成功,如下所示:
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;
}
但这不是好习惯...
相关文章:
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 分段 排序函数实现中的错误
- 无法去函数实现 vim
- C++ 20 中的运算符 == 和 <=> 应该作为成员还是自由函数实现?
- 为什么在这种情况下不调用我的虚拟函数实现?
- 我能否通过将函数实现为类对象方法来避免使用互斥锁
- 嵌套的模板结构构造函数实现
- C++接口的工厂函数实现
- 链表中的递归长度函数实现
- 我可以期望某些 STL 函数实现是可自动矢量化的吗?
- 如何将深拷贝构造函数实现到链表中?
- 虚拟 CTOR 的克隆函数实现是否有问题
- 没有捕获列表的 lambda 通常作为普通函数实现吗?
- C++二叉树打印函数实现
- C++:默认构造函数实现
- C++派生类中的纯虚函数实现
- 决定放置函数实现的位置
- 强制实施纯虚函数实现,可能使用不同的参数类型
- 如何让成员函数实现依赖于类的模板参数?
- 我们如何将Ostream函数作为类的成员函数实现,而不是作为朋友函数,以便我可以用作虚拟函数