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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2013, 12:16   #11
enerlol
Пользователь
 
Регистрация: 26.03.2011
Сообщений: 24
По умолчанию

Код:
int country_cmp(const void *a, const void *b){
    return strcmp(((el*)a)->country, ((el*)b)->country);
}
Код:
 case 4: qsort(el_list, MAX, sizeof(el_list), country_cmp);
Код:
C:\Users\enerlol\Desktop\lab 2.1 05112013\lab 2.2 15112013\main.c||In function 'country_cmp':|
C:\Users\enerlol\Desktop\lab 2.1 05112013\lab 2.2 15112013\main.c|23|error: 'el' undeclared (first use in this function)|
C:\Users\enerlol\Desktop\lab 2.1 05112013\lab 2.2 15112013\main.c|23|error: (Each undeclared identifier is reported only once|
C:\Users\enerlol\Desktop\lab 2.1 05112013\lab 2.2 15112013\main.c|23|error: for each function it appears in.)|
C:\Users\enerlol\Desktop\lab 2.1 05112013\lab 2.2 15112013\main.c|23|error: expected expression before ')' token|
C:\Users\enerlol\Desktop\lab 2.1 05112013\lab 2.2 15112013\main.c|23|error: expected expression before ')' token|
C:\Users\enerlol\Desktop\lab 2.1 05112013\lab 2.2 15112013\main.c||In function 'enter':|
C:\Users\enerlol\Desktop\lab 2.1 05112013\lab 2.2 15112013\main.c|92|warning: implicit declaration of function 'toupper'|
||=== Build finished: 5 errors, 1 warnings ===|
Нет
enerlol вне форума Ответить с цитированием
Старый 20.11.2013, 13:45   #12
nikmoon
Форумчанин
 
Регистрация: 13.11.2013
Сообщений: 149
По умолчанию

Нормуль, идем дальше.
country_cmp эт чо такое?
nikmoon вне форума Ответить с цитированием
Старый 20.11.2013, 14:08   #13
enerlol
Пользователь
 
Регистрация: 26.03.2011
Сообщений: 24
По умолчанию

Цитата:
Сообщение от nikmoon Посмотреть сообщение
Нормуль, идем дальше.
country_cmp эт чо такое?
Вспомогательная функция к qsort
enerlol вне форума Ответить с цитированием
Старый 20.11.2013, 14:24   #14
nikmoon
Форумчанин
 
Регистрация: 13.11.2013
Сообщений: 149
По умолчанию

Не вижу в твоем коде определения вспомогательной функции coutry_cmp.
nikmoon вне форума Ответить с цитированием
Старый 20.11.2013, 14:45   #15
enerlol
Пользователь
 
Регистрация: 26.03.2011
Сообщений: 24
По умолчанию

Цитата:
Сообщение от nikmoon Посмотреть сообщение
Не вижу в твоем коде определения вспомогательной функции coutry_cmp.
Зачем её определять? И ведь не в этом ошибка..

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 50
#define LINE "----------------------------------------------------------------------"

struct el {
  char country[15];
  char name[20];
  char chem[20];
  int zip;
} el_list[MAX];

void init_list(void), enter(void);
void delete(void), list(void);
int menu_select(void), find_free(void);


int country_cmp(const void *a, const void *b){
    return strcmp(((el_list*)a)->country, ((el_list*)b)->country);
}

int main(){
/* el_list arr[6] = {
        {.country = "Czehy", .name = "krzytal gorsky", .chem = "SiO2", .zip = 10002},
        {"Polska", "betyl", "Be3Al2Si6O18", 30001},
        {"Polska", "krzytal gorsky","SiO2", 10101},
        {"Polska", "agat","SiO2", 10001},
        {"Polska", "warezyt","ZnS", 00001},
        {.country = "Rosja", .name = "krzytal gorsky",.chem = "SiO2", .zip = 10003},
        };*/
  char choice;
//  register int slot;
//  char s[80];
  init_list(); /* инициализация массива структур */
  while ( 1 ){
        choice = menu_select();
        switch ( choice ){
            case 2 :
                enter();
                break;
            case 3 : delete(); enter();
                break;
            case 1: list();
                break;
            case 4: //qsort(el_list, MAX, sizeof(el_list), country_cmp);
                break;
            case 5: exit(0);
                break;
            case 0: exit(0);
            default :
                printf("Wrong menu index!\n");
        }
    }
  return 0;
}

/* Инициализация списка. */
void init_list(void)
{
  register int t;
  for(t=0; t<MAX; ++t) el_list[t].country[0] = '\0';
}

/* Получения значения, выбранного меню. */
int menu_select(void)
{   int c;
    printf("\nChoice one:\n1 - Show all\n2 - Add new\n3 - Edit title\n4 - Sort by country/name\n5 - Sort by country/element\n0 - exit\n> ");
        if (scanf("%d%*c",&c)!= 1) return -1;
    return c;
}

/* Ввод адреса в список. */
void enter(void)
{
  int slot;
  char s[80];
  int i=0, error=0;

  slot = find_free();

  if(slot==-1) {
    printf("\nSpisiok zapolnen");
    return;
  }
  do{
  printf("Country: ");
  gets(el_list[slot].country);
  el_list[slot].country[0] = toupper(el_list[slot].country[0]);

  printf("El.name: ");
  gets(el_list[slot].name);
  i=0;
  while (el_list[slot].name[i]){
        if(el_list[slot].name[i]>='0'&&el_list[slot].name[i]<='9'){
            printf("ERROR NAME\n");
            error=1;
            break;
        }
    i++;
    }

  printf("Chem: ");
  gets(el_list[slot].chem);
  i=0;
  while (el_list[slot].name[i]){
        if  (el_list[slot].name[i]=='/' || el_list[1].name[i]=='*' || el_list[1].name[i]=='+' || el_list[1].name[i]=='-'){
            printf("ERROR NAME\n");
            error=1;
            break;
        }
    i++;
    }

  printf("Indx: ");
  gets(s);
  el_list[slot].zip = strtoul(s, '\0', 10);
  if (el_list[slot].zip==0 || el_list[slot].zip>99999){
      printf("ERROR INDEX\n");
      error=1;
      }
  }
  while (error==1);
}

/* Поиск свободной структуры. */
int find_free(void)
{
  register int t;
  for(t=0; el_list[t].country[0] && t<MAX; ++t) ;
  if(t==MAX) return -1; /* свободных структур нет */
  return t;
}

/* Вывод списка на экран. */
void list(void)
{
  register int t;
  int e=0;

printf("\n%s\nCOUNTRY                  NAME           NUMBER            CHEM\n%s\n", LINE, LINE);
  for(t=0; t<MAX; ++t) {
    if(el_list[t].country[0]) {
        e=1; printf("%-20s%-20s%05d%18s\n", el_list[t].country, el_list[t].name, el_list[t].zip, el_list[t].chem);
    }
    if (e==0){printf("EMPTY"); break; }
  }
  printf("\n%s\n", LINE);
  printf("\n\n");
}

/* Удаление адреса.*/
void delete(void)
{
  register int slot;
  char s[80];

  printf("vvedite # zapisi: ");
  gets(s);
  slot = atoi(s);

  if(slot>=0 && slot < MAX)
    el_list[slot++].country[0] = '\0';
}
enerlol вне форума Ответить с цитированием
Старый 20.11.2013, 17:03   #16
nikmoon
Форумчанин
 
Регистрация: 13.11.2013
Сообщений: 149
По умолчанию

Ты издеваешься
Переименовал молча функцию. Я должен весь код просмотреть, да?
Ладно переименовал, так опять вместо el поставил el_list.
Ты реально издеваешься...
Ну раз так, читай книжки тогда.
nikmoon вне форума Ответить с цитированием
Старый 20.11.2013, 22:17   #17
enerlol
Пользователь
 
Регистрация: 26.03.2011
Сообщений: 24
По умолчанию

Цитата:
Сообщение от nikmoon Посмотреть сообщение
Ты издеваешься
Переименовал молча функцию. Я должен весь код просмотреть, да?
Ладно переименовал, так опять вместо el поставил el_list.
Ты реально издеваешься...
Ну раз так, читай книжки тогда.
Ну простите, я не вижу кнопки правки своего поста.
Конечно-же я не на столько глупый и понимаю, что имена одной и той-же функции не могут быть разными.
el_list вернул по простой причине того, что и с el, и с el_list вываливает ошибки, вот только в первом случае ещё и в три раза больше =_=
enerlol вне форума Ответить с цитированием
Старый 21.11.2013, 02:12   #18
nikmoon
Форумчанин
 
Регистрация: 13.11.2013
Сообщений: 149
По умолчанию

Код:
int country_cmp(const void *a, const void *b){
    return strcmp(((struct el*)a)->country, ((struct el*)b)->country);
}
Так попробуй.
nikmoon вне форума Ответить с цитированием
Старый 24.11.2013, 04:16   #19
enerlol
Пользователь
 
Регистрация: 26.03.2011
Сообщений: 24
По умолчанию

Цитата:
Сообщение от nikmoon Посмотреть сообщение
Код:
int country_cmp(const void *a, const void *b){
    return strcmp(((struct el*)a)->country, ((struct el*)b)->country);
}
Так попробуй.
Скомпилировало..
Ничего не понимаю. Чем отличаются в таком случае такое:
Код:
struct el {
  char country[15];
  char name[20];
  char chem[20];
  int zip;
} el_list[MAX];
от такого:
Код:
typedef struct el {
  char country[15];
  char name[20];
  char chem[20];
  int zip;
} el_list[MAX];
Ну и да, скомпилировать то вышло, но при сортировке программа крашится..
enerlol вне форума Ответить с цитированием
Старый 25.11.2013, 07:08   #20
nikmoon
Форумчанин
 
Регистрация: 13.11.2013
Сообщений: 149
По умолчанию

В С выражение
Код:
struct MyStruct {};
не создает новый тип MyStruct, поэтому надо при объявлении переменных использовать полное описание "struct MyStruct MyVar".
В C++ то же самое выражение создает новый тип MyStruct, и слово struct в объявлениях переменных можно не писать.

В каком месте программа крашится?

Последний раз редактировалось nikmoon; 25.11.2013 в 07:29.
nikmoon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка по двум полям по выбору пользователя DerFluch C# (си шарп) 12 18.11.2012 00:00
count по двум полям _SERGEYX_ БД в Delphi 3 05.06.2012 17:44
фильтр по двум полям Alex003 Помощь студентам 2 03.12.2011 11:39
Отбор по двум полям MPa БД в Delphi 4 06.02.2008 20:14
Фильтрация по двум полям Dunkas БД в Delphi 11 21.01.2008 23:59