Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Azay
0 / 0 / 1
Регистрация: 06.04.2013
Сообщений: 48
1

Сортировка данных в структуре

11.06.2013, 22:19. Просмотров 471. Ответов 4
Метки нет (Все метки)

Помогите пожалуйста тут ошибка в самой последней строчке программы.
Преподаватель сказал, что мне следует там использовать If и else, но я не знаю каким образом, т.к. с функцией compare я не был знаком ранее...
вот само условие:
Дана структрура с названием NOTE. Задание:
- ввод с клавиатуры данных в массив, состоящий из восьми элементов типа NOTE; записи должны быть упорядочены по трем первым цифрам номера телефона;
- вывод на экран информации о человеке, чья фамилия введена с клавиатуры; если такого нет, выдать на дисплей соответствующее сообщение.
C
1
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
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <locale.h>
const int l_name=30;
struct NOTE {
    char Surname[20];
    char Name[20];
    int Nomer;
    int Birth[50];
};
int compare (const void *stud1, const void *stud2); 
int main(){
    setlocale(LC_ALL, "Russian_Russia.1251");
    int n,i,k;
    char g[20];
    printf("Введите количество студентов n = ");
    scanf_s("%d",&n);
    NOTE *tr=new NOTE[n];  
    for (i=0; i<n; i++)
    {printf("%d-й студент: ",i+1);
    scanf_s("%s ", &tr[i].Surname);
    scanf_s("%s", &tr[i].Name);
    printf("\nВведите номер телефона: (098)");
    scanf_s("%s",&tr[i].Nomer);
    printf("\nВведите дату рождения");
    k=i+3*i;
    for(int j=k;j<k+3;j++)
        scanf_s("%s ",&tr[j].Birth);}
    qsort(tr,n,sizeof(NOTE),compare);   
    printf("\nСтуденты отсортированы по номерам телефонов\n");
    for(i=0; i<n; i++){
        printf("%10s %10s %3d %d.%d.%d\n",tr[i].Surname,tr[i].Name, tr[i].Nomer, tr[i+3*i].Birth, tr[i+3*i+1].Birth, tr[i+3*i+2].Birth);
    }
    int count=0;
    scanf_s("%10s", &g);
        {for(int i=0;i<n;i++)
            if(g==tr[i].Surname)
                printf("%10s %10s %3d %d.%d.%d\n",tr[i].Surname,tr[i].Name, tr[i].Nomer, tr[i+3*i].Birth, tr[i+3*i+1].Birth, tr[i+3*i+2].Birth);
                count++;
        
    }
    if (count==0) printf("Нет студентов с данной фамилией"); 
    delete tr;
    _getch();
    return 0;  
}
int compare (const void *stud1, const void *stud2){
return strcmp(((NOTE *)stud1)->Nomer,((NOTE *)stud2)->Nomer);}
Ошибка: error C2664: strcmp: Невозможно преобразовать параметр 1 из “int” в “const char *”
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2013, 22:19
Ответы с готовыми решениями:

Сортировка данных в структуре.
Здравствуйте. Необходимо отсортировать числовые данные в структуре. Интересует qsort. Искал на...

Сортировка в структуре
Здравствуйте, есть такая задача: Из файла (test.txt) нужно считать данные в структуру и...

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

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

Сортировка по одному из полей в структуре
Задана структуру с именем info, содержащую номер, имя и фамилию, а также дату рождения человека....

4
anmartex
...
1717 / 1209 / 909
Регистрация: 12.02.2013
Сообщений: 1,981
12.06.2013, 07:05 2
C++
1
2
3
4
int compare(const void* stud1, const void* stud2)
{
   return ((NOTE*)stud1)->Nomer < ((NOTE*)stud2)->Nomer;
}
1
Azay
0 / 0 / 1
Регистрация: 06.04.2013
Сообщений: 48
12.06.2013, 10:06  [ТС] 3
Спасибо большое, но теперь из программы выкидывает, когда доходит до строки qsort...
Вот уже все подставлено и исправлены мелкие недочеты...
C
1
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
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <locale.h>
const int l_name=30;
struct NOTE {
    char Surname[20];
    char Name[20];
    int Nomer[60];
    int Birth[50];
};
int compare (const void *stud1, const void *stud2); 
int main(){
    setlocale(LC_ALL, "Russian_Russia.1251");
    int n,i,k;
    char g[20];
    printf("Введите количество студентов n = ");
    scanf_s("%d",&n);
    NOTE *tr=new NOTE[n];  
    for (i=0; i<n; i++)
    {printf("%d-й студент: ",i+1);
    scanf_s("%10s ", &tr[i].Surname);
    scanf_s("%10s", &tr[i].Name);
    printf("\nВведите номер телефона: (098)");
    scanf_s("%d",&tr[i].Nomer);
    printf("\nВведите дату рождения");
    k=i+3*i;
    for(int j=k;j<k+3;j++)
        scanf_s("%s ",&tr[j].Birth);}
    qsort(tr,n,sizeof(NOTE),compare);   
    printf("\nСтуденты отсортированы по номерам телефонов\n");
    for(i=0; i<n; i++){
        printf("%10s %10s %3d %d.%d.%d\n",tr[i].Surname,tr[i].Name, tr[i].Nomer, tr[i+3*i].Birth, tr[i+3*i+1].Birth, tr[i+3*i+2].Birth);
    }
    int count=0;
    printf("Введите фамилию, что бы узнать, есть ли студент с данной фамилией: ");
    scanf_s("%10s", &g);
        {for(int i=0;i<n;i++)
            if(g==tr[i].Surname)
                printf("%10s %10s %3d %d.%d.%d\n",tr[i].Surname,tr[i].Name, tr[i].Nomer, tr[i+3*i].Birth, tr[i+3*i+1].Birth, tr[i+3*i+2].Birth);
                count++;
        
    }
    if (count==0) printf("Нет студентов с данной фамилией"); 
    delete tr;
    _getch();
    return 0;  
}
int compare(const void* stud1, const void* stud2)
{
   return ((NOTE*)stud1)->Nomer < ((NOTE*)stud2)->Nomer;
}
0
anmartex
...
1717 / 1209 / 909
Регистрация: 12.02.2013
Сообщений: 1,981
12.06.2013, 10:27 4
Не обижайтесь, но код хилый. Поправил всё то, что явно в глаза бросалось.
C
1
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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <locale.h>
 
typedef struct NOTE
{
   char Surname[20];
   char Name[20];
   int Nomer;
   char Birth[50];
}  NOTE;
 
int compare(const void* stud1, const void* stud2)
{
   return ((NOTE*)stud1)->Nomer < ((NOTE*)stud2)->Nomer;
}
 
int main()
{
   setlocale(LC_ALL, "Russian_Russia.1251");
   int n, i;
   char g[20];
   printf("Введите количество студентов n = ");
   scanf("%d", &n);
   NOTE* tr = (NOTE*) malloc(sizeof(NOTE) * n);
   for (i = 0; i < n; i++)
   {
      printf("%d-й студент: ", i + 1);
      scanf("%s", tr[i].Surname);
      scanf("%s", tr[i].Name);
      printf("\nВведите номер телефона: (098)");
      scanf("%d", &tr[i].Nomer);
      printf("\nВведите дату рождения: ");
      scanf("%s", tr[i].Birth);
   }
   qsort(tr, n, sizeof(NOTE), compare);
   printf("\nСтуденты отсортированы по номерам телефонов\n");
   for (i = 0; i < n; i++)
   {
      printf("%10s %10s %3d %s\n", tr[i].Surname, tr[i].Name, tr[i].Nomer, tr[i].Birth);
   }
 
   int count = 0;
   scanf("%10s", g);
   for (i = 0; i < n; i++)
   {
      if (strcmp(g, tr[i].Surname) == 0)
      {
         printf("%10s %10s %3d %s\n", tr[i].Surname, tr[i].Name, tr[i].Nomer, tr[i].Birth);
         count++;
      }
   }
 
   if (count == 0)
   {
      printf("Нет студентов с данной фамилией");
   }
   free(tr);
 
   return 0;
}
1
Azay
0 / 0 / 1
Регистрация: 06.04.2013
Сообщений: 48
12.06.2013, 11:19  [ТС] 5
Огромное спасибо)
0
12.06.2013, 11:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2013, 11:19

Хранение бинарных данных в структуре
У меня есть 8 флагов, как лучше их хранить в одной стуктуре, чтобы при этом было удобно смотреть...

Задать функцию, которая выполняет ввод данных по структуре
Необходимо задать функцию, которая выполняет ввод данных по структуре. Не очень понимаю, что должна...

Сортировка в структуре "Автомобиль"
int _tmain(int argc, _TCHAR* argv) { setlocale(LC_ALL, &quot;rus&quot;); const int n = 6; int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru