Открытие нескольких файлов, альтернативы 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 для ввода данных из файлов с помощью этой функции?

0

Решение

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

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

1

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

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

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

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

0

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