Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2011, 21:05   #1
jana89
 
Регистрация: 09.04.2011
Сообщений: 5
Восклицание сортировка структуры Си

пробую сделать qsort в стуктуре,можете посмотреть это примерно так делается или я что-то неправильно сделала? (данные структуры надо из файла брать, тоесть у меня есть готовая программа,кот. открывает файл, выводит записи, вносит новые записи и мне осталось туда сортировку добавить)
часть кода на си:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 15
 
typedef struct salon {
    char * usluga[100],
    char * imja[100],
    char * familija[100],
    char * data[11];
    float summa;
} klient[N];
 
int usluga const void * a, const void *b){
        return strcmp(((salon*)a)->usluga, ((salon*)b)->usluga);
}
 
int imja_cmp(const void * a, const void *b){
        return strcmp(((salon*)a)->imja, ((salon*)b)->imja);
}
int familija_cmp(const void * a, const void *b){
        return strcmp(((salon*)a)->familija, ((salon*)b)->familija);
        
}
int data_cmp(const void * a, const void *b){
        return strcmp(((salon*)a)->data, ((salon*)b)->data);
}
int summa_cmp(const void * a, const void *b){
        float f = ((salon*)a)->summa - ((salon*)b)->summa;
        return ( f < 0.0 ) ? -1 : ( f > 0.0 ) ? 1 : 0;
}
//-----------------------------------------------------------------------------------------------------//
 
 
//----------------------------------------------------------------------------------------------------//
       qsort(salon, N, sizeof(klient), usluga_cmp);
        printf("\nSortirovka_po_usluge:\n");
        for ( i = 0; i < N; ++i )
                  printf("%10s %9s %15s %15s %6.2f\n",klient[i].usluga,klient[i].imja,klient[i].familija,klient[i].data,klient[i].summa);
                
       qsort(salon, NUM_PERSONS, sizeof(klient), imja_cmp);
        printf("\nSortirovka_po_imeni:\n");
        for ( i = 0; i < N; ++i )
                 printf("%10s %9s %15s %15s %6.2f\n",klient[i].usluga,klient[i].imja,klient[i].familija,klient[i].data,klient[i].summa);
       
         qsort(salon, N, sizeof(klient), familija_cmp);
        printf("\nSortirovka_po_familii:\n");
        for ( i = 0; i < N; ++i )
                printf("%10s %9s %15s %15s %6.2f\n",klient[i].usluga,klient[i].imja,klient[i].familija,klient[i].data,klient[i].summa);
          qsort(salon, N, sizeof(klient), data_cmp);
        printf("\nSortirovka_po_date:\n");
        for ( i = 0; i < N; ++i )
                 printf("%10s %9s %15s %15s %6.2f\n",klient[i].usluga,klient[i].imja,klient[i].familija,klient[i].data,klient[i].summa);
                
                  qsort(salon, N, sizeof(klient), summa_cmp);
        printf("\nSortirovka_po_summe:\n");
        for ( i = 0; i < N; ++i )
                printf("%10s %9s %15s %15s %6.2f\n",klient[i].usluga,klient[i].imja,klient[i].familija,klient[i].data,klient[i].summa);
                 
//-------------------------------------------------------------------------------//
jana89 вне форума Ответить с цитированием
Старый 27.11.2011, 00:12   #2
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

http://www.cplusplus.com/reference/c...cstdlib/qsort/
(описание для си вроде должно быть точно таким же)

Код:
qsort(klient, N, sizeof(salon), usluga_cmp);
Все остальные вызовы кусорта тоже нужно подправить.
Остальное вроде верно.
_Ч_ вне форума Ответить с цитированием
Старый 27.11.2011, 01:39   #3
jana89
 
Регистрация: 09.04.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от _Ч_ Посмотреть сообщение
http://www.cplusplus.com/reference/c...cstdlib/qsort/
(описание для си вроде должно быть точно таким же)

Код:
qsort(klient, N, sizeof(salon), usluga_cmp);
Все остальные вызовы кусорта тоже нужно подправить.
Остальное вроде верно.
спс, все работает отлично
jana89 вне форума Ответить с цитированием
Старый 27.11.2011, 03:59   #4
jana89
 
Регистрация: 09.04.2011
Сообщений: 5
Вопрос

сначала данные структуры у меня были записаны следующим образом:
Код:
//{ .imja = "Alex", .familija = "Smirnov", .usluga = "raspe4atka",.data="12.12.12",.summa=98.22 },
                // { .imja = "Dima", .familija = "Klimov", .usluga = "kopirovanie",.data="17.10.11",.summa=76.22 },
                 //{ .imja = "Katja", .familija = "Umova", .usluga = "diplomka",.data="09.08.02",.summa=9.22 },
кароче в самой проге, я хочу сделать, чтобы данные считывались из файла, пока что не получается

Код:
int main(void) {int i;FILE *in;
        //klient_t klients[N] = {"klient_t.txt","r"};
        struct KLIENT klients= {"klient_t.txt"};
        if((in=fopen("klient_t.txt","r"))==NULL){
                 printf("nevozmowno otkritj fail\n");
                 }
                 else {
                      for (i = 0; i <N ; i++)
                      printf("%10s %9s %15s %15s %6.2f\n",klients[i].usluga,klients[i].imja,klients[i].familija,klients[i].data,klients[i].summa);
что я делаю не так?
jana89 вне форума Ответить с цитированием
Старый 27.11.2011, 19:30   #5
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Пытаешься передать данные в printf, не прочитав их из файла, например )

Последний раз редактировалось Son Of Pain; 27.11.2011 в 19:37.
Son Of Pain вне форума Ответить с цитированием
Старый 27.11.2011, 20:48   #6
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

кстати, не заметил сразу. как-то странно структура выглядит.
в ней массивы указателей на чары, а не массивы чаров.
запятые вместо точек с запятыми тоже подозрительны. но раз у вас что-то работало, значит сюда запостилось левое, а в коде все гуд.
_Ч_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка структуры данных CodeNOT Общие вопросы C/C++ 3 27.12.2010 21:24
Сортировка элементов структуры JeyKip Общие вопросы C/C++ 2 31.10.2009 20:08
Сортировка динамической структуры Lemo Помощь студентам 7 13.10.2009 18:58
сортировка структуры vo_sa Общие вопросы C/C++ 1 25.06.2009 14:16
структуры. не получается сортировка. grewnica Общие вопросы C/C++ 2 12.05.2009 14:49