В Dev-C++ код не работает - C (СИ)

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

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

Здравствуйте! Помогите пожалуйста c кодом, в консоле всё идёт, но работу надо сдавать в Dev-c++, но в Dev-C++ код не работает.
#include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/stat.h>
   
    #define n 15
    static const char* filename = "statistic.dat";
   
    struct information {
     char user[32];
     int array[n];
     int iterations;
   };
  
   // функция сортировки
   void sort(int* array, int* it) {
      int i, j;
      for(i = n - 1; i >= 1; i--) {
         for(j = 0; j < i; j++) {
            if(array[j] > array[j+1]) {
               int foo = array[j];
               array[j] = array[j+1];
               array[j+1] = foo;
               // инкрементируем счетчик
               (*it)++;
            }
         }
      }
   }
  
   // фнкция сравнения для qsort()
   int compar(const void* a, const void* b) {
      struct information* _1 = (struct information*)a;
      struct information* _2 = (struct information*)b;
      return _1->iterations < _2->iterations;
   }
  
   int main() {
      int i;
      struct information info;
      info.iterations = 0;
      // инициализируем члены структуры нужными значениями
      printf("Введите имя\n");
      scanf("%s", info.user);
      
      printf("Bedute 15 elemeHtoB macuBa\n");
      for(i = 0; i < n; i++) {
         printf("mass[%d] = ", i);
         scanf("%d", &info.array[i]);
      }
      printf("\n");
  
     // функция сортировки
      sort(info.array, &info.iterations);
  
      for(i = 0; i < n; i++) {
         printf("%4d ", info.array[i]);
      }
      printf("\n");
  
      // открываем файл для чтения предыдущей статистики
      FILE* file = fopen(filename, "rb");
      // если такого файла не существует, значит статистики нет
      if ( !file ) {
         // создаем
         file = fopen(filename, "wb");
         // если создать не удалось, значит ошибка
         if ( !file ) {
            // сообщаем
            fprintf(stderr, "can`t create file!");
            // возвращаем ошибку
            return 1;
         }
         // если файл создался - записываем в него первую структуру
         // записываем
         fwrite(&info, sizeof(struct information), 1, file);
         // закрываем файл
         fclose(file);
         // выходим
         return 0;
      } else {
         // предыдущая статистика существует
         // определяем размер файла чтоб узнать сколько структур в него записано
         // это нам нужно чтоб знать сколько памяти выделять
         struct stat fileinfo;
         fstat(fileno(file), &fileinfo);
         // размер файла
         int file_size = fileinfo.st_size;
         // кол-во структур в файле
         int structs = file_size/sizeof(struct information);
         // выделяем память
         struct information* structs_arr = (struct information*)malloc(sizeof(struct information)*(structs+1));
         // считываем из файла предыдущие структуры
         for ( i = 0; i < structs; ++i ) {
            fread(&structs_arr[i], sizeof(struct information), 1, file);
         }
         // закрываем файл
         fclose(file);
         // добавляем нашу структуру
        memcpy(&structs_arr[structs], &info, sizeof(struct information));
        // сортируем
        qsort(structs_arr, structs+1, sizeof(struct information), compar);
        // открываем файл для записи
        file = fopen(filename, "wb");
        // если не удалось -
        if ( !file ) {
           // освобождаем память
           free(structs_arr);
           // сообщаем
           printf("can`t open file for writing");
           // выходим
           return 1;
       }
        // записываем
        for ( i = 0; i < structs+1; ++i ) {
           fwrite(&structs_arr[i], sizeof(struct information), 1, file);
        }
 
        // освобождаем память
        free(structs_arr);
        // закрываем файл
        fclose(file);
     }
    return 0;
  }

Решение задачи: «В Dev-C++ код не работает»

textual
Листинг программы
// функция сортировки
   void sort(int* array, int* it) {
      int i, j;
      for(i = n - 1; i >= 1; i--) {
         for(j = 0; j < i; j++) {
            if(array[j] > array[j+1]) {
               int foo = array[j];
               array[j] = array[j+1];
               array[j+1] = foo;
               // инкрементируем счетчик
               (*it)++;
            }
         }
      }
   }

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

  1. Объявлены две переменные типа int: i и j. Они будут использоваться в цикле
  2. Начало цикла for для перебора элементов массива. Первый параметр - это n-1, второй параметр - это i. Значение n-1 будет использоваться в качестве верхней границы для цикла, а i будет уменьшаться на 1 на каждой итерации.
  3. Внутри цикла for объявлен второй цикл for для перебора элементов от 0 до i-1. Он будет использоваться для сравнения элементов массива и их последующей перестановки при необходимости.
  4. Если элемент array[j] больше элемента array[j+1], то выполняется следующий код:
    1. Создается переменная типа int с именем foo, которая получает значение элемента array[j].
    2. Значение элемента array[j] заменяется значением элемента array[j+1].
    3. Значение элемента array[j+1] заменяется значением переменной foo.
    4. Увеличивается значение счетчика (*it) на 1. Это означает, что элемент был перемещен, и счетчик должен быть увеличен на 1, чтобы отразить новую позицию элемента.
  5. По завершении внутреннего цикла for, цикл for для перебора элементов массива продолжается до тех пор, пока i больше или равно 1.
  6. Если внутреннего цикла for не произошло ни одного перемещения (то есть, счетчик не увеличился), это означает, что массив уже отсортирован, и функция сортировки может быть завершена.
  7. В конце функции sort вызывается деструктор для освобождения памяти, выделенной для указателя it. Это необходимо, потому что указатель it был выделен в куче, и его необходимо освободить, когда он больше не нужен.
  8. Функция sort возвращает void, что означает, что она не возвращает никакого значения.

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


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

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

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