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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2009, 22:07   #1
[MI_nor]
Пользователь
 
Регистрация: 03.11.2008
Сообщений: 94
По умолчанию Сортировка в алфавитном порядке

Функция считвает из файла структуры, записывает их в массив и сортирует в алфавитном порядке. Для сортироки пытаюсь использовать qsort() но программы вылетает)

Код:
#define m 100
typedef struct
 { char name[25];
   float otc[5];
   }student;
student st;
void print()
 {

  clrscr();
  f=fopen(filename,"rb");
  int c;
   student *mas;
    i=0;int n;
    while(feof(f)==0)
      {
       if (fread(&st,sizeof(st)+1,1,f)!=0)
	{
	 mas[i]=st;i++;n++;
	}
      }
   qsort(mas[i].name, n, sizeof(char[m]), (int (*) (const void *, const void *) ) strcmp);
   printf("\nЪ--------------------------------------------------------------------ї");
   printf("\n| F.I.O                "); for (i=0;i<5;i++){printf("%8s ",pred[i]);}
   printf("\nГ--------------------------------------------------------------------ґ");
   for (i=0;i<n;i++){
   printf("\n| %-20s",mas[i].name); for (i=0;i<5;i++)
				       {
					if (mas[i].otc[i]!=0)
					 printf("%9.2f",mas[i].otc[i]);
				       }  }
  printf("\nА--------------------------------------------------------------------Щ\n");
  getch();
 }
[MI_nor] вне форума Ответить с цитированием
Старый 15.03.2009, 23:00   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

А где подключения заголовочных файлов?
А вообще, чтобы сортировать массив структур, то нужно перегрузить операцию меньше или больше для этой структуры.
MaTBeu вне форума Ответить с цитированием
Старый 15.03.2009, 23:13   #3
[MI_nor]
Пользователь
 
Регистрация: 03.11.2008
Сообщений: 94
По умолчанию

Ну это я просто фрагмент кода привел =)
А чем перегружать?
[MI_nor] вне форума Ответить с цитированием
Старый 16.03.2009, 00:32   #4
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Сделайте лучше вот так структуру
Код:
struct Student
{
   char name[25];
   float otc[5];
   bool operator<(const Student &s)   //перегрузка операции сравнения "меньше"
   {
      return strcmp(this->name, s.name)<0 ? true : false;
   }
};
Перегрузка операций - это когда вы пишете на стандартные операции С++ свою реализацию.
MaTBeu вне форума Ответить с цитированием
Старый 16.03.2009, 00:42   #5
[MI_nor]
Пользователь
 
Регистрация: 03.11.2008
Сообщений: 94
По умолчанию

эээ, а досовском си нет типа bool
пытался сделать вот так...
Код:
typedef struct student
 { char name[25];
   float otc[5];
   int operator<(const &s)
    {
     return strcmp(this->name,s.name)<0 ? 1:0;
    }
 };
Выдает ошибку "Structure required on left side of. or .*"
[MI_nor] вне форума Ответить с цитированием
Старый 16.03.2009, 00:58   #6
vvviperrr
Тупой студент
Форумчанин
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
По умолчанию

Код:
 int operator<(const &s)
что это за хрень. где тип данных
vvviperrr вне форума Ответить с цитированием
Старый 16.03.2009, 01:07   #7
[MI_nor]
Пользователь
 
Регистрация: 03.11.2008
Сообщений: 94
По умолчанию

int - вот это =)
[MI_nor] вне форума Ответить с цитированием
Старый 16.03.2009, 01:21   #8
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Погодь, а где ты в Си взял функцию qsort?
Я блин всегда говорю, указывайте язык!!! Вот потом и помогай таким, которые не отличают Си от С++.

Последний раз редактировалось MaTBeu; 16.03.2009 в 01:24.
MaTBeu вне форума Ответить с цитированием
Старый 16.03.2009, 01:27   #9
[MI_nor]
Пользователь
 
Регистрация: 03.11.2008
Сообщений: 94
По умолчанию

Ну вообще-то в си есть функция qsort=) использует заголовочный файл stdlib.h =)
Компилятор ^_^ Борланд Си 3.1 =)

Последний раз редактировалось [MI_nor]; 16.03.2009 в 01:32.
[MI_nor] вне форума Ответить с цитированием
Старый 16.03.2009, 10:54   #10
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

В Си есть функция qsort, а вот перегрузки операций нет. Да и не нужна она тут, мне кажется
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Упорядочить слова в алфавитном порядке sasha45 Общие вопросы C/C++ 36 20.06.2011 11:03
Вывод списка в алфавитном порядке ErvinR PHP 4 24.10.2008 16:03
отсортировать таблицу сначала в алфавитном порядке фамилий продавцов, затем в порядке возростания получен Lora Microsoft Office Excel 1 31.05.2008 17:22