Я пытаюсь использовать freopen () несколько раз для чтения и закрытия разных файлов.
Итак, вот что я сделал внутри своей основной функции:
if (argc != 5) {
std::cerr << "Wrong format of arguments given." << endl;
return -1;
}
std::string command, command2;
freopen(argv[1], "r", stdin);
// do something...
fclose(stdin);
freopen(argv[2], "r", stdin);
freopen(argv[3], "w", stdout);
while (std::cin >> command) {
std::cin >> command2;
// run some function...
}
fclose(stdin);
fclose(stdout);
Но оказывается, что первая часть, // do something...
работает нормально (читает с std::cin
без проблем) но цикл while во втором, похоже, не запускается.
Входные файлы имеют правильный формат, поэтому я не знаю, почему std::cin >> command
возвращает ложь
В соответствии freopen(argv[2], "r", stdin);
вы пытаетесь открыть снова stdin
, Но вы уже закрылись stdin
в соответствии fclose(stdin);
как раз перед этим Также, stdin
теперь висячий указатель после закрытия файл.
Ниже приводится выдержка из www.cplusplus.com:
Если указано новое имя файла, функция сначала пытается закрыть любой файл, уже связанный с потоком (третий параметр), и отключает его. Затем, независимо от того, был ли этот поток успешно закрыт или нет, freopen открывает файл, указанный в имени файла, и связывает его с потоком так же, как fopen будет использовать указанный режим.
Вы должны использовать fopen()
функция после закрытия stdin
,
Других решений пока нет …