Открытие нескольких файлов, альтернативы fopen()

Я начинающий программист и заинтересован в конкурентном программировании. Я недавно сделал грейдер для проблем с COCI. В функции этого кода я беру входные данные из входных файлов, используя цикл. Его часть открытия файла выглядит так -

int next(int id)
{

    // [[OPEN FILES]] -----------------------

    string name1 = probid+".in." + itoa(id);
    string name2 = probid + "OUTPUT" +".out." + itoa(id);

    FILE *fp1 = fopen(name1.c_str(), "r");   
    if(!fp1) return 0;                            // no file left?
    FILE *fp2 = fopen(name2.c_str(), "w");        

    // process data
}

"id" изменяет и открывает входные файлы и записывает результаты в выходной файл. Основная проблема заключается в том, что я должен читать данные с помощью (fscanf), но я хочу получить ввод с помощью cin, cout. (вещи, которые предлагает freopen)

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

Можно ли в любом случае использовать cin, cout для ввода данных из файлов с помощью этой функции?

2 ответа

Решение

std::cin а также std::cout являются потоковыми объектами, которые ссылаются на стандартный ввод и стандартный вывод. Однако в C++ у нас также есть потоковые классы для файлов: std::ifstreamа также std::ofstream, Они используют точно так же >> а также << функции.

Эти классы файлового потока имеют член .open() который может открыть новый файл, при условии, что вы закрыли предыдущий файл.

Вы можете использовать freopen ().

freopen ("direcotry/to/input/file", "r", stdin); // second argument is opening mode

freopen ("direcotry/to/output/file", "w", stdout);

Другие вопросы по тегам