CMD:program.exe 1< " A:/input.txt"没有产出

时间:2018-05-24 17:32:16

标签: c++ windows cmd

我已经更新了问题:

int main(int argc, char *argv[]){
cout << "cout argc: " << argc << endl;
cerr << "cerr argc: " << argc << endl;

cout << "cout usatty: " << _isatty(_fileno(stdin)) << endl;
cerr << "cerr usatty: " << _isatty(_fileno(stdin)) << endl;

if (argc == 1 && _isatty(_fileno(stdin)))
{
    cout << "cout Error: No space between num and <" << endl;
    cerr << "cerr Error: No space between num and <" << endl;
}
}

Cmd输出:

program.exe 0< "A:/input.txt"
cout argc: 1
cerr argc: 1
cout usatty: 0
cerr usatty: 0

program.exe 1< "A:/input.txt"
cerr argc: 1
cerr usatty: 64
cerr Error: No space between num and <

program.exe 2< "A:/input.txt"
cout argc: 1
cout usatty: 64
cout Error: No space between num and <

现在我可以检测到&lt; 1和&lt; 2(但不区分它们)和&lt; 0仍未检测到。

所以我还有两个问题:

1)如何打印适用于&lt; 1和&lt; 2

的错误消息

2)我如何检测&lt; 0

1 个答案:

答案 0 :(得分:4)

C ++程序打开了三个标准文件:标识输入编号为0,标准输出编号为1,标准错误编号为2(C ++也有标准日志{{1}但它与标准输出相同,除非它没有被缓冲)。

您使用std::clog正在尝试将输入重定向到标准输出。这当然行不通。

如果1<1之间有空格,就像在<中一样,那么您将1 <作为参数传递给程序(将放入1,索引与参数无关),重定向是标准输入。