Я начинающий программист и заинтересован в конкурентном программировании.
Я недавно сделал грейдер для проблем с 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 для ввода данных из файлов с помощью этой функции?
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);