Запись в файл по три элемента массива - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Интересует такой вопрос. Вот, допустим, я в файл хочу записать данные (элементы массива). Но так, чтобы записывалось (например, это не столь принципиально) по 3 элемента массива (тип double) в строке файла с 16 знаками после запятой. Я знаю, что в фортране это делается, например, так:
write (1, '(3F25.16)'), (a(i), i = 1, n)
Расстояние - 6 или 7 пробелов между числами (и это не суть важно, главное, чтоб оно было). Вопрос: а как такое же сделать в Си без наворотов? Я-то придумал как, но это, мягко говоря, жестоко выглядит:
    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", " ");
        }
    }
Расстояние в 5 пробелов получается, выглядит файл более-менее нормально, считывается нормально, но код мне совершенно не нравится. Не подскажете ли, как в пару строк такое сделать. Я уверен, что можно почти столь же коротко, сколь и в фортране. Заранее благодарю за ответы.

Решение задачи: «Запись в файл по три элемента массива»

textual
Листинг программы
i=0; while(((i+1)%3) ? fprintf(file, "%f     ", a[i]) : fprintf(file, "\n"), ++i<n);

Объяснение кода листинга программы

В данном коде выполняется запись элементов массива в файл. Постановка задачи включает следующие шаги:

  1. Создание файла - перед началом работы необходимо создать файл, в который будут записываться данные. В данном коде этот шаг не выполняется, предполагается, что файл уже существует.
  2. Инициализация переменной i - в начале работы переменной i присваивается значение 0. Она будет использоваться для отслеживания количества записанных элементов.
  3. Основной цикл - выполняется запись элементов массива в файл до тех пор, пока не будут записаны три элемента.
    • Условие цикла - условие для цикла 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.
  4. Закрытие файла - после окончания работы с файлом его необходимо закрыть с помощью функции fclose(file). В данном коде этот шаг не выполняется, предполагается, что файл будет закрыт после выполнения всех операций. Таким образом, в данном коде выполняется запись элементов массива в файл по три элемента на строку.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.667 из 5
Похожие ответы