Сортировка списка файлов по имени, дате и размеру - C (СИ)

  1. задан список файлов в папке, для каждого из которых указаны имя, расширение, размер, дата. реализовать сортировку по возрастанию и убыванию по всем характеристикам и подсчитать суммарный объём. заполнение верно?как применить qsort?и можно выводить структуру на экран?C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #include<conio.h> #include<stdlib.h> #include<stdio.h>   struct str {     char name;     char exp;     float size;     float date; };   int main() {     struct str a[4];     int i=0;     float j=0;     {     for(i; i < 4; i++)     printf("file #%i",i);     printf("enter name");     scanf("%c",&a[i].name);     printf("enter expansion");     scanf("%c",&a[i].exp);     printf("enter size");     scanf("%f",&a[i].size);     printf("enter date");     scanf("%f",&a[i].date);     }         {for(i=0, i < 4, i++)             j=j+a[i].size         }         printf("common size %f",j);Добавлено через 1 час 16 минутC1 2 3 {for(i=0, i < 4, i++)       printf("%f%c",a[i]);      }так структуру выведет?


textual

Код:

#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
 
#define STR_LEN 64
 
typedef struct str
{
        char name[STR_LEN];
        char exp[STR_LEN];
        unsigned long size;
        int tm_date;
} str_t;
 
int name_c(const void * a, const void * b){
    return strcmp(((str_t*)a)->name, ((str_t*)b)->name);
}
 
int exp_c(const void * a, const void * b){
    return strcmp(((str_t*)a)->exp, ((str_t*)b)->exp);
}
 
int size_c(const void * a, const void * b){
    return ((str_t*)a)->size - ((str_t*)b)->size;
}
 
int tm_date_c(const void * a, const void * b){
    return ((str_t*)a)->tm_date - ((str_t*)b)->tm_date;
}
 
void dump(const str_t * arr, size_t cnt){
    while ( cnt-- ){
        printf("%-20s%-5s%10u%10d\n", arr->name, arr->exp, arr->size, arr->tm_date);
        ++arr;
    }
}
 
#define NUM_FILES 4
 
int main(void)
{
    str_t a[NUM_FILES];
    int i;
        
    for(i=0; i < 4; i++){
                printf("file #%i\n", i+1);
                printf("enter name: ");
                scanf("%s", a[i].name);
                printf("enter expansion: ");
                scanf("%s", a[i].exp);
                printf("enter size: ");
                scanf("%lu", &a[i].size);
                printf("enter date: ");
                scanf("%i", &a[i].tm_date);
    }
 
 
    printf("\n Unsorted \n");
    dump(a, NUM_FILES);
    printf("\n Sorted by name: \n");
    qsort(a, NUM_FILES, sizeof(str_t), name_c);
    dump(a, NUM_FILES);
    printf("\n Sorted by expansion: \n");
    qsort(a, NUM_FILES, sizeof(str_t), exp_c);
    dump(a, NUM_FILES);
    printf("\n Sorted by size: \n");
    qsort(a, NUM_FILES, sizeof(str_t), size_c);
    dump(a, NUM_FILES);
    printf("\n Sorted by date: \n");
    qsort(a, NUM_FILES, sizeof(str_t), tm_date_c);
    dump(a, NUM_FILES);
    
    /* с этим сами как-нибудь                    printf("common size %f",j);
 
    а этого у меня нету getch(); */
    return 0;
}


Похожие ответы
  1. Добрый вечер! Дан массив M*N. Необходимо отсортировать ее по строкам так, чтобы вначале шли все положительные элементы, отсортированные по убыванию, а затем все остальные, отсортированные по возрастанию (если в строке имеются нули - переставить их в конец строки). Вывести получившуюся матрицу. У меня проблема с перестановкой нулей. C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 #include     int main()     {   int N, M,t, i,j,k, mas[10][10]={0}, q;         printf("VVEDITE N,M \n");     scanf("%d%d", &N,&M);     printf("VVEDITE MASSIV \n");       for (i=0; i < N; i++)        for (j=0; j < M; j++)            scanf ("%d", &mas[i][j]);       for(k = 0; k < N; k++){     for(i = 0 ; i < M; i++){         for(j = i + 1; j < M; j++){               if((mas[k][i] < mas[k][j]) && (mas[k][i]!=0)){                       t = mas[k][i];                     mas[k][i] = mas[k][j];                     mas[k][j] = t;               }         }     } }   if (mas[i][j]<0) {     } {   for(k = 0; k < N; k++){         for(i = 0 ; i < M; i++){             for(j = i + 1; j < M; j++){                   if(mas[k][i] < mas[k][j]) {                       t = mas[k][i];                     mas[k][i] = mas[k][j];                     mas[k][j] = t;               }         }     } } } for(i = 0 ; i < M; i++)     {         for(j = 0; j < M; j++)             if (mas[i][j]==0)         {                 for ( q = j; q < N-1 ; q++)                 {                     mas[i][q] = mas[i][q + 1];                 }                 mas[N-1][M-1] = 0;           }     }   for (i=0; i < N; i++)        {for (j=0; j < M; j++)               printf ("%d\t", mas[i][j]);        printf (" \n");}   getch();}

  1. Помогите пожалуйста, нужен кусок кода который будет заполнять список данными на языке Си

  1. Есть быстрая сортировка:C++1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 void quick_sort(int* sarr, int j) {     int size = j;     int k = 0;     int c = sarr[(int)(j / 2)];     int tmp = 0;     do {         while (sarr[k] < c) k++;         while (sarr[j] > c) j--;           if (k <= j) {             tmp = sarr[k];             sarr[k] = sarr[j];             sarr[j] = tmp;             k++;             j--;         }     } while (k <= j);     if (j > 0) quick_sort(sarr, j);     if (j > 0) quick_sort(sarr + k, size - k); }Как сделать что бы сортировались только четные числа?

  1. Нужна программа, в которую вводишь текст и она расставляет буквы по алфавиту (обязательно с помощью пузырьковой сортировки) и выводит на экран с пробелами между группой букв. Пример: Ввод: Annulo cingitul tenui, plano, nusquam cohaerente, ad eclipticam inclinato. Вывод: aaaaaaa cccc d eeeee g h iiiiiii lllll mm nnnnnnnnn oooo pp q r s ttttt uuuuu

  1. Мне нужно вставить узел в хвост списка. Я написал функцию вставки, но она не доходит до конца списка. В функцию передаю список и информационное поле узла, которое надо вставить. Можете помочь найти ошибку?C++1 2 3 4 5 6 7 8 9 10 11 12 Node*AddInTail(Node**p,int k) {       Node*ins=new Node; // узел, который надо вставить     Node*walk=new Node;// создаем новый узел,для прохода по списку         ins->k=k;                 //в информационное поле вставляю число k         for(walk=*p;walk->next!=NULL;walk=walk->next) //дохожу до конца списка             {                 walk->next=ins; //в указатель конца списка записываю узел                 ins->next=NULL; //в указатель вставленного узла записываю NULL     return *p;     }     return *p; }

  1. Не могу нормально отсортировать элементы структуры с помощью быстрой сортировки. Программа просто, не прекращается, как будто цикл бесконечный. Не могу понять где ошибка. HELP!C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 #include #include #include #include #include #include struct Product {     char name[15]; }; int N; struct Product A[100]; struct Product X[1]; int Check_Input() {     char buf[BUFSIZ];     char junk;     int Input;     bool ok = false;     while (!ok)     {         _textcolor(7);         fputs("Введите количество товара: ", stdout);         fflush(stdout);         if (fgets(buf, BUFSIZ, stdin) == NULL)         {             if (!ferror(stdin))             {                 fputs("Вход не доступен!\n", stderr);                 exit(EXIT_FAILURE);             }             else             {                 perror("stdin");                 clearerr(stdin);                 continue;             }         }         if (sscanf(buf, "%d %c\n", &Input, &junk) != 1)         {             _textcolor(4);             fputs("Неправильный ввод!\n", stderr);             continue;         }         if (Input <= 0 || Input > 99)         {             _textcolor(4);             fputs("Неправильный ввод!\n", stderr);             continue;         }         ok = true;     }     return Input; } void speed2_inc_dec1_flat1(int l, int r) {     int k=(r + l) / 2;  //находят  центральный элемент     printf("%d\n",k);     A[N+1]=A[k];     printf("%s\n",X[1].name);     int i = l;     int j = r;     while (i <= j)     {         while //(A[i].name[0] > X[1].name[0])             (strcmp(A[i].name,A[N+1].name)<0)             i++;         while //(A[i].name[0] < X[1].name[0])             (strcmp(A[i].name,A[N+1].name)>0)             j++;         if (i <= j)         {             A[N] = A[j];             A[j] = A[i];    //<----Обмен переменными             A[i] = A[N];             i++;             j--;         }     }     if (i < r)         speed2_inc_dec1_flat1(i, r);     if (l < j)         speed2_inc_dec1_flat1(l, j); } void Output(struct Product *array, int size) {     for(int i = 0; i < size; i++)     {         printf("%s\n", array[i].name);     } } void Input(struct Product *array, int size) {     for(int i = 0; i < size; i++)     {         printf("Введите элемент №%d: ", i+1);         scanf("%s", &array[i].name);     } } int main(int argc, char *argv[]) {     setlocale(LC_ALL, "ru");     system("cls");     N=Check_Input();     Input(A,N);     Output(A,N);     speed2_inc_dec1_flat1(0,N-1);     Output(A,N); }

  1. Пожалуйста, помогите написать такую программу Заполнить массив из 10 элементов случайными числами в интервале [0..100] и отсортировать его по последней цифре. Пример: Исходный массив: 14 25 13 30 76 58 32 11 41 97 Результат: 30 11 41 32 13 14 25 76 97 58

  1. В общем, я запутался. Вот задание. Необходимо разработать программу согласно варианту задания. При реализации использовать указатели на функции и (или) массивы указателей на функции. -------------------------------------------------- Дан список записей типа ТОВАР (размер списка и его элементы вводятся пользователем). Упорядочить список по любому из полей в любом направлении. Поле и направление выбирает пользователь. В функцию сортировки должен передаваться указатель на функцию сравнения двух элементов. (20 баллов). ТОВАР: - наименование товара (строка 15 символов); - единицы измерения (строка 5 символов); - цена (вещественное число с двумя знаками после запятой); - количество (целое положительное число). То, что накаляканоC1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 #include #include #include #include #include typedef struct {     char  name[16];     char  mesr[6];     double price;     int count; }Good; typedef Good *Ptr; typedef int (*Pfun)( void *, void * ); int cmpNM ( void *, void * ); int cmpCNT( void *, void * ); void sortbychoice( Ptr , int, size_t, void (*), Pfun ); void swap ( Ptr , Ptr ); int main( int argc, char *argv[ ] ) {     //printf( "%d",  offsetof( Good, count) );     int d = 0, count;     printf( "Enter count of lists: ");     while( !d || count <= 0)     {         d = scanf( "%d", &count );         if( !d || count <= 0 ) { while( getchar( ) != '\n' ); printf( "Repeat: "); }     }     fflush( stdin );     int i;     Ptr list = (Good*)calloc( count, sizeof(Good));     for( i = 0; i < count; i++ ) { printf( "Name|Measure|Price|Count: " ); scanf( "%s%s%lf%d", list[i].name, list[i].mesr, &list[i].price, &list[i].count ); while( getchar( ) != '\n' );}       //       //sortbychoice( list, count, sizeof(char)*15, list[i].name, cmpNM );     sortbychoice( list, count, offsetof( Good, count ), &list[i].count, cmpCNT);     for( i = 0; i < count; i ++ ) printf( "Name: %s | Measure: %s | Price: %3.2lf | Count: %03d\n", list[i].name, list[i].mesr, list[i].price, list[i].count );     system( "pause" );     getch( );     return 0; }   void swap ( Ptr arg1, Ptr arg2 ) {    Good temp = *arg1;    *arg1 = *arg2;    *arg2 = temp;    return; } int cmpNM( void * arg1, void * arg2 ) {     if( strcmp( (char*)arg1, (char*)arg2 ) == 1 ) return 1;     else return 0; } int cmpCNT( void * arg1, void *arg2 ) {     if(*((int*)arg1) > *((int*)arg2)) return 1;     else return 0; } void sortbychoice ( Ptr good, int count, size_t size, void *arr, Pfun fun  ) {      Ptr mass = good;      int i, j, im;      char * ar = ( char* )arr;      for( i = 0; i < count - 1; i++ ){         im = i;         for( j = i + 1; j < count; j++ ) if( fun( (void*)( ar + im*size),  (void*)( ar + j * size )) ) im = j;         swap( &mass[i], &mass[im] );      }      return; }Добавлено через 3 минуты дело в том, что я не могу понять, как мне обращаться к началу памяти одного и того же поля в массиве структур. Делал такое с обычными массивами, вроде всё работало. Вот как делал:C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 void SortArray( void *array, unsigned num, size_t size, int (*fun)(void *arg1, void *arg2), void (*fun1)( void *arg1, void *arg2)) {     int i, j;     int imin, imax;     char *ptr = (char* )array; // указатель на начало памяти массива     for( i = 0; i < num - 1; i += 2 )     {         imin = i;         for( j = i + 2; j < num; j += 2 )         if( fun( (void*)(ptr + imin*size), (void*)(ptr + j*size)) > 0 ) imin = j;                 fun1( ptr + i*size, ptr + imin*size);// смещение указателя на size бацтов массив     }  for( i = 1; i < num - 1; i += 2 )     {         imax = i;         for( j = i + 2; j < num; j += 2 )         if( fun( (void*)(ptr + imax*size), (void*)(ptr + j*size)) < 0 ) imax = j;                 fun1( ptr + i*size, ptr + imax*size );// смещение указателя на size бацтов массив     } }Добавлено через 32 минуты Сообщение от Michail97 //sortbychoice( list, count, sizeof(char)*15, list[i].name, cmpNM ); * * sortbychoice( list, count, offsetof( Good, count ), &list[i].count, cmpCNT); На эти строки на намекать. ИсправилДобавлено через 3 минуты В общем, для сортровки по кол - ву работает вроде.C1 2 3 4 5 6 7 8 9 10 11 12 void sortbychoice ( Ptr good, int count, void *arr, Pfun fun  ) {      Ptr mass = good;      int i, j, im;      char * ar = ( char * )arr; // указатель на начало памяти выбранного поля аргумента arg      for( i = 0; i < count - 1; i++ ){         im = i;         for( j = i + 1; j < count; j++ ) if( fun( (void*)( ar + im*sizeof( Good)),  (void*)( ar + j * sizeof(Good) )) ) im = j;         swap( &mass[i], &mass[im] );      }      return; }Сейчас попробую со строками также провернутьДобавлено через 9 минут В общем, пока работает. Если найдёте грабли ещё, укажите, пожалуйста. C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 #include #include #include #include #include typedef struct {     char  name[16];     char  mesr[6];     double price;     int count; }Good; typedef Good *Ptr; typedef int (*Pfun)( void *, void * ); int cmpNM ( void *, void * ); int cmpCNT( void *, void * ); void sortbychoice( Ptr , int, void (*), Pfun ); // для 1 - ого аргумента необходимо передать 2 - ой указатель void swap ( Ptr , Ptr ); int main( int argc, char *argv[ ] ) {     //printf( "%d",  offsetof( Good, count) );     int d = 0, count;     printf( "Enter count of lists: ");     while( !d || count <= 0)     {         d = scanf( "%d", &count );         if( !d || count <= 0 ) { while( getchar( ) != '\n' ); printf( "Repeat: "); }     }     fflush( stdin );     int i;     Ptr list = (Good*)calloc( count, sizeof(Good));     for( i = 0; i < count; i++ ) { printf( "Name|Measure|Price|Count: " ); scanf( "%s%s%lf%d", list[i].name, list[i].mesr, &list[i].price, &list[i].count ); while( getchar( ) != '\n' );}       //       sortbychoice( list, count,list[0].name, cmpNM );     //sortbychoice( list, count, &list[0].count, cmpCNT);     for( i = 0; i < count; i ++ ) printf( "Name: %s | Measure: %s | Price: %3.2lf | Count: %03d\n", list[i].name, list[i].mesr, list[i].price, list[i].count );     system( "pause" );     getch( );     return 0; }   void swap ( Ptr arg1, Ptr arg2 ) {    Good temp = *arg1;    *arg1 = *arg2;    *arg2 = temp;    return; } int cmpNM( void * arg1, void * arg2 ) {     if( strcmp( (char*)arg1, (char*)arg2 ) == 1 ) return 1;     else return 0; } int cmpCNT( void * arg1, void *arg2 ) {     if(*((int*)arg1) > *((int*)arg2)) return 1;     else return 0; } void sortbychoice ( Ptr good, int count, void *arr, Pfun fun  ) {      Ptr mass = good;      int i, j, im;      char * ar = ( char * )arr;      for( i = 0; i < count - 1; i++ ){         im = i;         for( j = i + 1; j < count; j++ ) if( fun( (void*)( ar + im*sizeof( Good)),  (void*)( ar + j * sizeof(Good) )) ) im = j;         swap( &mass[i], &mass[im] );      }      return; }

  1. Не получается выполнить сортировку двусвязного списка методом пузырька. У меня получилось сделать только один заход, а их надо несколько.C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 struct LIST {     int info;     LIST* next;     LIST* prev; };   void sort(LIST *i, LIST *start, LIST *last) {     int tmp=0;     i=start;     if((i->info)>(i->next->info))     {         tmp=i->info;         i->info=i->next->info;         i->next->info=tmp;     } }

  1. Добрый день уважаемы форумчане проблема вот в чём, не работает сортировка (компилю в Pellec C, может проблема в нём) и ещё не совсем понимаю как сделать фильтрацию, помогите кто чем может. Код прилагаю.C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 #include #include #include #include   struct node {     int elem;     char* name;     struct node* next, *prev; };   typedef struct node Node;   struct list {     Node* head;     Node* tail; };   typedef struct list List;   void initializeList(List* lst) {     lst->head = 0;     lst->tail = 0; }   void push_back(List* lst, int numb ,  char nam []) {     Node* t = (Node*) malloc(sizeof(Node));     t->elem = numb;      size_t length = strlen(nam);    t->name = (char*) malloc(length + 1);    strcpy(t->name, nam);;     t->next = 0;     if(lst->head == 0)     {        lst->head = t;        lst->tail = t;        return;     }     lst->tail->next = t;     lst->tail = t; }   void print_list(const List* const lst) {     for(Node* tmp = lst->head; tmp; tmp = tmp->next)         printf("%d  %s\n", tmp->elem,tmp->name);   }   void free_list(List* lst) {     lst->tail = lst->head;     while(lst->head)     {        lst->head = lst->head->next;        free(lst->tail);        lst->tail = lst->head;     } }        void SaveToFile(List* lst) {       FILE *f;     f = fopen("main.txt","wb"); // Открываем файл на запись данных     if (f == NULL) { // Не удалось открыть - выводим сообщение об ошибке         fprintf(stderr, "Не могу открыть файл на запись.\n");         }     int count = 0;      for(Node* tmp = lst->head; tmp; tmp = tmp->next)         { // Записываем в файл элементы по 1 за цикл, перемещаясь по списку пока не достигнем конца         fprintf(f, "%d\r\n",tmp->elem);         fprintf(f, "%s\r\n",tmp->name);        count++;     }     // Закрываем файл     fclose(f);     // Выводим сообщение     printf("\n --> Записано %d записей в файла main.txt\n",count);   }    void LoadInFile(List* lst) {       FILE *f;     f = fopen("main.txt","ab+"); // Открываем файл на запись данных     if (f == NULL) { // Не удалось открыть - выводим сообщение об ошибке         fprintf(stderr, "Не могу открыть файл на запись.\n");         exit(0);     }     int count = 0;           char* w = (char*)malloc(30 * sizeof(char));         int q;         while(fscanf (f, "%d%s",  &(q),w) != EOF)         {        // printf("%d %s\n", q, w);         push_back(lst,q,w);         count++;            }     // Закрываем файл     fclose(f);     // Выводим сообщение     printf("\n --> Загрузил %d записей в файла main.txt\n",count);   }   void search_elem(List* lst, int numb) {    Node* tmp = lst->head;      printf("Список искомых");      printf("==============================\n");      while(tmp!=NULL)      {          if(tmp->elem==numb)          {              printf(" %d",tmp->elem);              printf(" %s\n",tmp->name);            }          tmp=tmp->next;      } }     void Del_elem (List* lst,int n) {     int i;      Node *s = lst->head;     Node *p;     for (i = 1; i < n - 1; i ++)         s = s->next;     p = s->next;     s->next = s->next->next;     free(p); }   void Red_elem (List* lst,int n) {     int i;      Node *s = lst->head;     for (i = 1; i <= n - 1; i ++)         s = s->next;         printf("Редактируеммая запись");         printf(" %d",s->elem);         printf(" %s\n",s->name);         printf("Введите новые значения");         scanf("%d",&s->elem);         scanf("%s",s->name); }     void ind_list(List* lst) { List ls; initializeList(&ls); int elem; char name[30]; for(Node* tmp = lst->head; tmp; tmp = tmp->next)     {         printf(" %d",tmp->elem);         printf(" %s\n",tmp->name);         elem=tmp->elem;         strcpy(name,tmp->name);         printf(" %d",elem);         printf(" %s\n",name);         push_back(&ls,elem,name);     }   }   void SortIns(List *lst) {   Node *tmp, *cur;         //Локальные переменные   //Проверка: если в списке менее двух элементов, то   //сортировать бессмысленно   if((!lst->head)||(!lst->head->next)) return;   //Устанавливаеся указатель на текущий элемент на второй   lst->tail = lst->head->next;       //элемент в списке   //В цикле: пока не упорядочены все элементы   while(lst->tail){     //Указатель tmp - на текущий элемент в списке     tmp = lst->tail;     //Указатель cur - на предыдущий элемент в списке     cur = lst->tail->prev;     //Указатель на текущий элемент устанавливается на     //следующий элемент в списке     lst->tail = lst->tail->next;     //Выделение элемента, на который установлен указатель     cur->next = tmp->next;               //tmp, из списка     if(tmp->next) tmp->next->prev = cur;     //В цикле производится поиск места вставки    //while(cur&&(cmp(&cur->elem,&tmp->elem) > 0))       cur = cur->prev;     //Если выделенный элемент нужно вставить в «середину»     if(cur){       tmp->next = cur->next;       tmp->prev = cur;       cur->next = tmp;       if(tmp->next) tmp->next->prev = tmp;     }else{  //Иначе: в начало списка       tmp->next = lst->head;       tmp->prev = NULL;       lst->head->prev = tmp;       lst->head = tmp;     }   }   //Установка указателя на текущий элемент на   lst->tail = lst->head;    //начало списка }       int main(void) { setlocale(LC_ALL, "RU");     List lst;     initializeList(&lst);     LoadInFile(&lst);     //SortIns(&lst);     int input;     do{     printf("Выберите действие: ");     printf("\n1 - Вывод списка на экран: ");     printf("\n2 - Добавление записи: ");     printf("\n3 - Редактирование записи: ");     printf("\n4 - Удаление записи: ");     printf("\n5 - Поиск записи:");     printf("\n6 - Выход:\n");     scanf( "%d", &input );     system("cls");     switch ( input ) {         case 1:                       print_list(&lst);             break;         case 2:             push_back(&lst, 10,"azz");             break;         case 3:             Red_elem(&lst,2);             break;         case 4:             Del_elem(&lst,4);             ind_list(&lst);             break;         case 5:             search_elem(&lst,10);             break;         case 6:             SaveToFile(&lst);             free_list(&lst);             exit(0);             break;           default:             printf( "Неправильный ввод.\n" );     }     }while(input!= 6);     //int k;     //char l[30];     //scanf("%d",&k);     //scanf("%s",l);       /*printf("\n 1Список\n");     print_list(&lst);    // push_back(&lst, 10,"azz");     //push_back(&lst, 15,"azz");    // push_back(&lst, 25,"azz");    // push_back(&lst, 1,"azz");     //push_back(&lst, k,l);     printf("\n 2Список\n");     print_list(&lst);     Red_elem(&lst,2);     printf("\n 4Список\n");     print_list(&lst);     Del_elem(&lst,4);     ind_list(&lst);     printf("\n 3Список\n");     print_list(&lst);       search_elem(&lst,10);*/     SaveToFile(&lst);     free_list(&lst); }Компилятор ругается на эту строчку C1 //while(cur&&(cmp(&cur->elem,&tmp->elem) > 0)) проблема во мне или в компиляторе?