在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;
}
答案 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;
}
关于全局变量的注释同样适用于a
,b
和c
,但我认为这些是作为发布的示例引入的。
还请记住,在实际代码中,您应始终检查输入是否成功,如下所示:
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;
}
但这不是好习惯......