我正在使用以下命令执行我的程序:
./myProgram -i test.in -o test.out
这两个文件都合法且存在。
// run all over the arguments and set the cin and cout if needed
for (int i = 1; i < argc; i= i+2)
{
int j = i+1;
// loop over each pairs of arguments
do
{
// set cin
if(argv[i] == "-i")
{
static std :: ifstream s_inF(argv[j]);
std :: cin.rdbuf(s_inF.rdbuf());
break;
}
//set cout
if(argv[i] == "-o")
{
std::ofstream out(argv[j]);
std::cout.rdbuf(out.rdbuf());
break;
}
// in order to search for the other case
// (example:X.out -i)
int temp = i;
i = j;
j = temp;
}while(i>j);
}
我在main
中写了这个块,以便根据cin
重定向cout
和char **argv
。
cin
工作正常但cout
没有。
当我这样做时它起作用:
// run all over the arguments and set the cin and cout if needed
for (int i = 1; i < argc; i= i+2)
{
int j = i+1;
// loop over each pairs of arguments
do
{
// set cin
if(argv[i] == "-i")
{
static std :: ifstream s_inF(argv[j]);
std :: cin.rdbuf(s_inF.rdbuf());
break;
}
//set cout
if(argv[i] == "-o")
break;
// in order to search for the other case
// (example:X.out -i)
int temp = i;
i = j;
j = temp;
}while(i>j);
}
std::ofstream out(argv[4]);
std::cout.rdbuf(out.rdbuf());
导致问题的原因是什么?
答案 0 :(得分:3)
安装流缓冲区后,您安装到std::cout
的流缓冲区的流会被破坏:
std::ofstream out(argv[j]);
std::cout.rdbuf(out.rdbuf());
第一行需要阅读
static std::ofstream out(argv[j]);
可能还有其他错误,但这是我发现的错误。
答案 1 :(得分:0)
它不起作用,因为你需要j为i+1
来重定向输出才能工作。试一试 - 如果您首先通过第一个样本中的-o
然后-i
会发生什么?
改变这个:
int temp = i;
i = j;
j = temp;
对此:
int temp = i;
i = j;
j = temp + 1;
你还必须处理while条件。
那么为什么你需要j
呢?您只能使用i而不是使用i + 1进行重定向。我相信这也会使代码更容易理解。