Массив неизвестного размера
Прмер. В файле input.datзаписаны в два столбика пары чисел (x,y). Записать в файл
output.datв столбик суммы x+yдля каждой пары.Сложность этой задачи состоит в том, что мы не можем прочитать все данные сразу в память,обработать их и записать в выходной файл. Не можем потому, что не знаем, сколько пар чисел в массиве. Конечно, если известно, что в файле, скажем, не более 200 чисел, можно выделить массив «с запасом», прочитать столько данных, сколько нужно, и работать только с ними. Однако в файле могут быть миллионы чисел и такие массивы не поместятся в памяти.
Однако, если подумать, становится понятно, что для вычисления суммы каждой пары
нужны только два числа, а остальные мы можем не хранить в памяти. Когда вычислили их
сумму, ее также не надо хранить в памяти, а можно сразу записать в выходной файл. Поэтому будем использовать такой алгоритм:
1) открыть два файла, один на чтение (с исходными данными), второй – на запись;
2) попытаться прочитать два числа в переменные xи y; если это не получилось (нет больше данных или неверные данные), закончить работу;
3) сложить xи yи записать результат в выходной файл;
4) перейти к шагу 2.
Для того, чтобы определить, удачно ли закончилось чтение, мы будем использовать тот факт,что функция fscanf(как и scanf) возвращает количество удачно считанных чисел. За один раз будем читать сразу два числа, xи y. Если все закончилось удачно, функция fscanfвозвращает значение 2 (обе переменных прочитаны). Если результат этой функции меньше двух,данные закончились или неверные.
Заметим, что надо работать одновременно с двумя открытыми файлами, поэтому в памяти
надо использовать два указателя на файлы, они обозначены именами finи fout. Для сокращения записи ошибки при открытии файлов не обрабатываются.
Дата добавления: 2015-10-05; просмотров: 567;