Запись в файл по три элемента массива - C (СИ)
Формулировка задачи:
Интересует такой вопрос. Вот, допустим, я в файл хочу записать данные (элементы массива). Но так, чтобы записывалось (например, это не столь принципиально) по 3 элемента массива (тип double) в строке файла с 16 знаками после запятой. Я знаю, что в фортране это делается, например, так:
Расстояние - 6 или 7 пробелов между числами (и это не суть важно, главное, чтоб оно было).
Вопрос: а как такое же сделать в Си без наворотов? Я-то придумал как, но это, мягко говоря, жестоко выглядит:
Расстояние в 5 пробелов получается, выглядит файл более-менее нормально, считывается нормально, но код мне совершенно не нравится. Не подскажете ли, как в пару строк такое сделать. Я уверен, что можно почти столь же коротко, сколь и в фортране.
Заранее благодарю за ответы.
write (1, '(3F25.16)'), (a(i), i = 1, n)
fprintf(file, "%s", " "); for (i = 1; i <= n; ++i) { fprintf(file, "%.16lf ", a[i]); for (k = 1; k <= (int) n / 3; ++k) if (i == 3*k) { fprintf(file, "%s", "\n"); fprintf(file, "%s", " "); } }
Решение задачи: «Запись в файл по три элемента массива»
textual
Листинг программы
i=0; while(((i+1)%3) ? fprintf(file, "%f ", a[i]) : fprintf(file, "\n"), ++i<n);
Объяснение кода листинга программы
В данном коде выполняется запись элементов массива в файл. Постановка задачи включает следующие шаги:
- Создание файла - перед началом работы необходимо создать файл, в который будут записываться данные. В данном коде этот шаг не выполняется, предполагается, что файл уже существует.
- Инициализация переменной i - в начале работы переменной i присваивается значение 0. Она будет использоваться для отслеживания количества записанных элементов.
- Основной цикл - выполняется запись элементов массива в файл до тех пор, пока не будут записаны три элемента.
- Условие цикла - условие для цикла while это ((i+1)%3) ? fprintf(file,
%f
, a[i]) : fprintf(file,\n
). То есть, если i+1 делится на 3 без остатка (т.е. i+1 это 3, 6, 9 и т.д.), то выполняется запись элемента массива в файл. В противном случае (т.е. i+1 это 1, 2, 4 и т.д.), выполняется переход на новую строку. - Тело цикла - в теле цикла происходит запись элемента массива в файл с помощью функции fprintf(file,
%f
, a[i]). Значение переменной i увеличивается на 1.
- Условие цикла - условие для цикла while это ((i+1)%3) ? fprintf(file,
- Закрытие файла - после окончания работы с файлом его необходимо закрыть с помощью функции fclose(file). В данном коде этот шаг не выполняется, предполагается, что файл будет закрыт после выполнения всех операций. Таким образом, в данном коде выполняется запись элементов массива в файл по три элемента на строку.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д