stdin — открытие нескольких файлов с помощью freopen в Stack Overflow

Я пытаюсь использовать 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 возвращает ложь

1

Решение

В соответствии freopen(argv[2], "r", stdin); вы пытаетесь открыть снова stdin, Но вы уже закрылись stdin в соответствии fclose(stdin); как раз перед этим Также, stdin теперь висячий указатель после закрытия файл.

Ниже приводится выдержка из www.cplusplus.com:

Если указано новое имя файла, функция сначала пытается закрыть любой файл, уже связанный с потоком (третий параметр), и отключает его. Затем, независимо от того, был ли этот поток успешно закрыт или нет, freopen открывает файл, указанный в имени файла, и связывает его с потоком так же, как fopen будет использовать указанный режим.

Вы должны использовать fopen() функция после закрытия stdin,

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]