CMD: program.exe 1 <"A: /input.txt" не выводит - PullRequest
0 голосов
/ 24 мая 2018

Я обновил вопрос:

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 <

Теперь я могу определять <1 и <2 (но не различать их) и <0все еще остается незамеченным. </p>

Таким образом, для меня остаются две проблемы:

1) Как напечатать сообщение об ошибке, которое работает как с <1, так и с <2 </p>

2) Какя могу обнаружить <0 </p>

1 Ответ

0 голосов
/ 24 мая 2018

В программах на C ++ открыто три стандартных файла: стандартный ввод под номером 0, стандартный вывод под номером 1 и стандартная ошибка под номером 2 (C ++ также имеет стандартный журнал с std::clog, но он такой же, какстандартный вывод, за исключением того, что он не буферизован).

То, что вы делаете с 1<, пытается перенаправить ваш ввод на стандартный выход .Это, конечно, не сработает.

Если у вас есть пробел между 1 и <, как в 1 <, тогда вы передаете 1 в качестве аргумента программе (который будетпомещается в argv[1], индекс не связан с аргументом), а перенаправление выполняется на стандартный ввод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...