我已经更新了问题:
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
答案 0 :(得分:4)
C ++程序打开了三个标准文件:标识输入编号为0
,标准输出编号为1
,标准错误编号为2
(C ++也有标准日志{{1}但它与标准输出相同,除非它没有被缓冲)。
您使用std::clog
正在尝试将输入重定向到标准输出。这当然行不通。
如果1<
和1
之间有空格,就像在<
中一样,那么您将1 <
作为参数传递给程序(将放入1
,索引与参数无关),重定向是标准输入。