Когда я указываю входной файл в качестве аргумента файла, например:
./asm ex1_in
все работает как надо!
Однако, когда я указываю входной файл с помощью перенаправления, кактак:
./asm < ex1_in
программа выдает ошибку, которую она должна выдать, если входной файл поврежден или не существует.
Это часть кода, которая обрабатывает ввод иаргументы файла:
int main(int argc, char * argv []) {
ifstream InFile(argv[1], ios::in);
if (!(InFile.is_open())) { /* check file */
fprintf (stderr, "The input file cannot be open or cannot be read. \n");
return 2;
}
if (InFile.is_open()) {
//some stuff
InFile.close();
}
//other stuff
}
Я хотел бы иметь возможность продолжать использовать ifstream, так как это очень полезно для остальной части программы.
Кроме того, предполагается, что программа принимает входные данные непосредственно в stdin, если не указан аргумент файла.В настоящее время, если файловые аргументы не предоставлены, он выдает ту же ошибку вместо поиска пользовательского ввода.
РЕДАКТИРОВАТЬ: я добавил строку в main
, чтобы попытаться увидеть, что происходит, и похоже, что при использовании перенаправления ввода программа не видит argv [1] или что-либо после него.
cout << argv[0] << " " << argv[1] << " " << argv[2];
распечатывает только ./asm
.
Когда перенаправление ввода не используется, распечатывается:
./asm ex1_in my1_out