Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/244: Рейтинг темы: голосов - 244, средняя оценка - 5.00
11 / 11 / 0
Регистрация: 16.02.2011
Сообщений: 17
1

Структура. Поиск по структуре.

16.02.2011, 20:19. Показов 46790. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер, ув. форумчане. Я новичек в С/C++, в данный момент сам учусь по урокам Шага. Дошел до структур, в принципе смысл понял, но столкнулся с проблемой при выполнении домашнего задания.
Есть задание - создать структуру Видеомагазин с ... полями. Организовать поиск по названию. Вот на поиске я почему-то и присел.
Есть структура:
C++
1
2
3
4
5
6
7
8
9
int const col=5;
struct video
{
    char name[40];
    char regis[40];
    char genre[40];
    int rate;
    int price;
}film[col];
Есть ф-ция добавления записей:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void AddInfo()
{   
    int k;
    cout<<"Введите кол-во записей";
    cin>>k;
    for (int i=0; i<k; i++){
        cout<<"Введите название фильма:\n";
        cin>>film[k].name;
        cout<<"Введите режиссера фильма:\n";
        cin>>film[k].regis;
        cout<<"Введите жанр фильма:\n";
        cin>>film[k].genre;
        cout<<"Введите рейтинг фильма:\n";
        cin>>film[k].rate;
        cout<<"Введите цену на диск с фильмом:\n";
        cin>>film[k].price;
    }
}
И есть ф-ция поиска по названию фильма:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Searchname(char *name[])
{
    for(int i=1; i<=col;i++){
        if (strcmp(name, film[i].name)==0){
            cout<<"Название фильма: "<<film[i].name<<"\n";
            cout<<"Режиссер фильма: "<<film[i].regis<<"\n";
            cout<<"Жанр фильма: "<<film[i].genre<<"\n";
            cout<<"Рейтинг фильма: "<<film[i].rate<<"\n";
            cout<<"Цена диска с фильмом: "<<film[i].price<<"\n";
        }
        else
            cout<<"Фильм с таким названием не найден";
    }
}
Код самой программы:
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
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
 
void AddInfo();
void Searchname(char *name[]);
 
void main()
{
    char *name[20], choice;
    setlocale(LC_ALL, "rus");
    cout<<"Выберите требуемое действие:\n1-Добавить информацию о фильме...\n2-Поиск фильма по названию...\n";
    cin>>choice;
    switch(choice){
        case '1':
            AddInfo();
        break;
        case '2':
            cout<<"Введите название фильма\n";
            cin>>name;
            Searchname(name);
        break;
    }
}
И вот здесь я стал в тупик с переменной name. Компилятор ругаеться на неё, а я не могу понять, в чем моя ошибка. Пробовал и gets() её считывать, все равно ругается. Неправильно обьявляю её чтоль?
Заранее спасибо за любую помощью.
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.02.2011, 20:19
Ответы с готовыми решениями:

Структура в структуре
Есть структура типа struct my{ struct size { float x: float y; }; float z; }

Структура в структуре
Подскажите пожалуйста! Вот для начала немного кода: struct r2 { // ... }; struct somestruct...

Структура в структуре
struct Sportzal{ struct services{ int services_price; int services_id; char...

Структура в структуре. Как считать?
Всем привет. Пишу курсач на тему База Данных студентов универа.. Реализовать надо на списках. У...

9
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.02.2011, 20:21 2
Да.
Ну и вообще-то массив в С++ начинаются с нуля... Следовательно идут ДО n, не включая n.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Searchname(char *name)
{
        for(int i=1; i<=col;i++){
                if (strcmp(name, film[i].name)==0){
                        cout<<"Название фильма: "<<film[i].name<<"\n";
                        cout<<"Режиссер фильма: "<<film[i].regis<<"\n";
                        cout<<"Жанр фильма: "<<film[i].genre<<"\n";
                        cout<<"Рейтинг фильма: "<<film[i].rate<<"\n";
                        cout<<"Цена диска с фильмом: "<<film[i].price<<"\n";
                }
                else
                        cout<<"Фильм с таким названием не найден";
        }
}
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
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
 
void AddInfo();
void Searchname(char *name);
 
void main()
{
        char name[20], choice;
        setlocale(LC_ALL, "rus");
        cout<<"Выберите требуемое действие:\n1-Добавить информацию о фильме...\n2-Поиск фильма по названию...\n";
        cin>>choice;
        switch(choice){
                case '1':
                        AddInfo();
                break;
                case '2':
                        cout<<"Введите название фильма\n";
                        cin>>name;
                        Searchname(name);
                break;
        }
}
1
11 / 11 / 0
Регистрация: 16.02.2011
Сообщений: 17
16.02.2011, 20:38  [ТС] 3
Спасибо, помогло! Но, наверное, я намудрил в ф-ции поиска - почему-то ненаходит фильм, введенный ранее. Не подскажите, в чем ошибка?

UPD: Замена ф-ции strcmp() на stricmp() вроде бы решила проблему.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.02.2011, 20:40 4
А так?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Searchname(char *name)
{
        for(int i=0; i<col;i++){
                if (strcmp(name, film[i].name)==0){
                        cout<<"Название фильма: "<<film[i].name<<"\n";
                        cout<<"Режиссер фильма: "<<film[i].regis<<"\n";
                        cout<<"Жанр фильма: "<<film[i].genre<<"\n";
                        cout<<"Рейтинг фильма: "<<film[i].rate<<"\n";
                        cout<<"Цена диска с фильмом: "<<film[i].price<<"\n";
                }
                else
                        cout<<"Фильм с таким названием не найден";
        }
}
1
11 / 11 / 0
Регистрация: 16.02.2011
Сообщений: 17
16.02.2011, 20:44  [ТС] 5
Цикл с 0 до n я сразу изменил, дело было в strcmp() по идее. Но все же спасибо! Пошел доделывать программу.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.02.2011, 20:49 6
notgosu, А. strcmp сравнивает учитывая регистр. stricmp без учета
0
11 / 11 / 0
Регистрация: 16.02.2011
Сообщений: 17
16.02.2011, 22:04  [ТС] 7
Цитата Сообщение от ForEveR Посмотреть сообщение
notgosu, А. strcmp сравнивает учитывая регистр. stricmp без учета
Угу, поэтому и заменил для удобства.

Добавлено через 1 час 4 минуты
Вот доделал. Может будет кому-то полезно, кто как и я по урокам Шага учит язык.
1. Создать структуру ВИДЕОМАГАЗИН со следующими полями:

-Название фильма
-Режиссер
-Жанр
-Рейтинг популярности
-Цена диска

Реализовать следующие возможности:
-Поиск по названию
-Поиск по жанру
-Поиск по режиссеру
-Самый популярный фильм в жанре
-Показ всех записей и добавление

Код:
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
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
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
 
 
//обьявление структуры
int const col=5;
struct video
{
    char name[40];
    char regis[40];
    char genre[40];
    int rate;
    int price;
}film[col];
 
//прототипы ф-ций
void AddInfo();
void Searchname(char *name);
void Searchgenre(char *genre);
void Searchregis(char *regis);
void Searchpop(char *popgenre);
void ShowAll();
 
//главная программа
void main()
{
        char name[20],genre[20], regis[20],popgenre[20], choice;
        setlocale(LC_ALL, "rus");
        //меню
        do{
        cout<<"Выберите требуемое действие:\n1-Добавить информацию о фильме...\n2-Поиск фильма по названию...\n";
        cout<<"3-Поиск по жанру...\n4-Поиск по режиссеру...\n5-Самый популярный фильм в жанре...\n6-Показать все фильмы...\n7-Выход...\n";
        cin>>choice;
        switch(choice){
                case '1':
                        AddInfo();
                break;
                case '2':
                        cout<<"Введите название фильма\n";
                        cin>>name;
                        Searchname(name);
                break;
                case '3':
                        cout<<"Введите жанр фильма\n";
                        cin>>genre;
                        Searchgenre(genre);
                break;
                case '4':
                    cout<<"Введите режиссера\n";
                    cin>>regis;
                    Searchregis(regis);
                break;
                case '5':
                    cout<<"Введите жанр фильма\n";
                    cin>>popgenre;
                    Searchpop(popgenre);
                break;
                case '6':
                    ShowAll();
                break;
                case '7':
                    exit(0);
                break;
                default:
                    cout<<"Неправильный выбор\n";
                    break;
        }
        }
        while (choice != '7');
}
 
//ф-ция добавления информации
void AddInfo()
{   
    int k;
    cout<<"Введите кол-во записей:\n";
    cin>>k;
    for (int i=0; i<k; i++){
        cout<<"Введите название фильма["<<i<<"]:\n";
        cin>>film[i].name;
        cout<<"Введите режиссера фильма["<<i<<"]:\n";
        cin>>film[i].regis;
        cout<<"Введите жанр фильма["<<i<<"]:\n";
        cin>>film[i].genre;
        cout<<"Введите рейтинг фильма["<<i<<"]:\n";
        cin>>film[i].rate;
        cout<<"Введите цену на диск с фильмом["<<i<<"]:\n";
        cin>>film[i].price;
    }
}
 
//ф-ция поиска по названию
void Searchname(char *name)
{       
        for(int i=0; i<col;i++){
                if (_stricmp(name, film[i].name)==0){
                        cout<<"Название фильма: "<<film[i].name<<"\n";
                        cout<<"Режиссер фильма: "<<film[i].regis<<"\n";
                        cout<<"Жанр фильма: "<<film[i].genre<<"\n";
                        cout<<"Рейтинг фильма: "<<film[i].rate<<"\n";
                        cout<<"Цена диска с фильмом: "<<film[i].price<<"\n";
                        cout<<"##########################\n";
                }
                else 
                    cout<<"Фильм с таким названием не найден\n";
        }
        
}
//ф-ция поиска по жанру
void Searchgenre(char *genre)
{       
        for(int i=0; i<col;i++){
                if (_stricmp(genre, film[i].genre)==0){
                        cout<<"Название фильма: "<<film[i].name<<"\n";
                        cout<<"Режиссер фильма: "<<film[i].regis<<"\n";
                        cout<<"Жанр фильма: "<<film[i].genre<<"\n";
                        cout<<"Рейтинг фильма: "<<film[i].rate<<"\n";
                        cout<<"Цена диска с фильмом: "<<film[i].price<<"\n";
                        cout<<"##########################\n";
                }
                else 
                    cout<<"Фильм такого жанра не найден\n";
        }
        
}
 
//ф-ция поиска по режиссеру
void Searchregis(char *regis)
{       
        for(int i=0; i<col;i++){
                if (_stricmp(regis, film[i].regis)==0){
                        cout<<"Название фильма: "<<film[i].name<<"\n";
                        cout<<"Режиссер фильма: "<<film[i].regis<<"\n";
                        cout<<"Жанр фильма: "<<film[i].genre<<"\n";
                        cout<<"Рейтинг фильма: "<<film[i].rate<<"\n";
                        cout<<"Цена диска с фильмом: "<<film[i].price<<"\n";
                        cout<<"##########################\n";
                }
                else 
                    cout<<"Фильм этого режиссера не найден\n";
        }
        
}
 
//Ф-ция поиска самого популярного фильма в жанре
void Searchpop(char *popgenre)
{       
        int max=0,maxnum;
        for(int i=0; i<col;i++){
                if (_stricmp(popgenre, film[i].genre)==0){
                    if (film[i].rate>max){
                        max=film[i].rate;
                        maxnum=i;
                    }
                }
                else 
                    cout<<"Фильм этого режиссера не найден\n";
        }
        cout<<"САМЫЙ ПОПУЛЯРНЫЙ ФИЛЬМ В ЖАНРЕ:\n";
        cout<<"Название фильма: "<<film[maxnum].name<<"\n";
        cout<<"Режиссер фильма: "<<film[maxnum].regis<<"\n";
        cout<<"Жанр фильма: "<<film[maxnum].genre<<"\n";
        cout<<"Рейтинг фильма: "<<film[maxnum].rate<<"\n";
        cout<<"Цена диска с фильмом: "<<film[maxnum].price<<"\n";
        cout<<"##########################\n";
        
}
 
//ф-ция показа всех фильмов
void ShowAll()
{   
    for (int i=0; i<col; i++){
        cout<<"Название фильма: "<<film[i].name<<"\n";
        cout<<"Режиссер фильма: "<<film[i].regis<<"\n";
        cout<<"Жанр фильма: "<<film[i].genre<<"\n";
        cout<<"Рейтинг фильма: "<<film[i].rate<<"\n";
        cout<<"Цена диска с фильмом: "<<film[i].price<<"\n";
        cout<<"##########################\n";
    }
}
9
4 / 4 / 1
Регистрация: 18.09.2012
Сообщений: 38
10.10.2012, 01:20 8
Я сделал так:

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
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
// dz16_1.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <Windows.h>
using namespace std;
 
struct magazin
{
char sNazvanie[50];
char sReziser[20];
char sZanr[20];
double sReiting;
double sChena;
}mag[50]={{"mars", "petia", "fantastika" ,11.5,5},{"terminator", "cameron", "fantastika" ,10.1,5},{"fredi","craven", "uzasi", 7.2,5},{"baikal", "vasia", "priroda",9.2,4}};
 
struct magazin *s;
int i=3;
 
void glavnoe_menu();
void Pokaz_vseh_zapisei();
void Dobavit_film();
void Poisk_po_nazvaniu_filma();
void Poisk_po_zanru_filma();
void Poisk_po_reziseru_filma();
void Polar_zanr();
//void Dobavit_film(magazin *s);
//void Poisk_po_nazvaniu(char *Nazvanie,  magazin *s);
//struct poisk_magazin(magazin *s);
void main()
{
 
        glavnoe_menu();
 
        system("Pause");
}
 
 
 
void glavnoe_menu()
{
        char menu;
                cout<<"Menu"<<endl;
                cout<<"1 Pokaz vseh zapisei"<<endl;//Поиск по названию 
                cout<<"2 Dobavit film "<<endl;//Поиск по жанру 
                cout<<"3 Poisk po nazvaniu"<<endl;//Поиск по режиссеру 
                cout<<"4 Poisk po zanru"<<endl;//Самый популярный фильм в жанре 
                cout<<"5 Poisk po reziseru"<<endl;//Показ всех записей и добавление 
                cout<<"6 Samii popularnii film v zanre"<<endl;
                cout<<"7 Exit"<<endl;
                cin>>menu;
                cout<<endl;
                switch (menu)
                {
                case '1': 
                        cout<<"Pokaz vseh zapisei"<<endl;
                        Pokaz_vseh_zapisei();
                        break;
                case '2': 
                        cout<<"Dobavite film"<<endl;
                        Dobavit_film();
                        //вызов функции
                        break;
                case '3': 
                        cout<<"Vvedite nazvaniu filma"<<endl;
                        Poisk_po_nazvaniu_filma();
                        //вызов функции
                        break;
                case '4': 
                        cout<<"Vvedite zanru filma"<<endl;
                        Poisk_po_zanru_filma();
                        //вызов функции
                        break;
                case '5': 
                        cout<<"Vvedite rezisera filma"<<endl;
                        Poisk_po_reziseru_filma();
                        //вызов функции
                        break;
                case '6': 
                        cout<<"Vvedite zanru filma dlia pokaza Samogo popularnogo filma v zanre"<<endl;
                        Polar_zanr();
                        //вызов функции
                        break;
                case '7': 
                        return;
                }
                cout<<endl;
        glavnoe_menu();
}
 
void Pokaz_vseh_zapisei()
{
        for (int j=i;j>=0;j--)
                        {
                                cout<<mag[j].sNazvanie<<" ";
                                cout<<mag[j].sReziser<<" ";
                                cout<<mag[j].sZanr<<" ";
                                cout<<mag[j].sReiting<<" ";
                                cout<<mag[j].sChena<<" ";
                                cout<<endl;
                        }
        if (i==0) cout<<"Zapisei poka net";
}
 
void Dobavit_film()
{
 
        char temp;
        do
        {
                        i++;
                        cout<<"Vvedite Nazvanie ";
                        cin>>mag[i].sNazvanie;
                        cout<<"Vvedite Rezisera ";
                        cin>>mag[i].sReziser;
                        cout<<"Vvedite Zanr ";
                        cin>>mag[i].sZanr;
                        cout<<"Vvedite Reiting ";
                        cin>>mag[i].sReiting;
                        cout<<"Vvedite Chenu ";
                        cin>>mag[i].sChena;
                        cout<<endl<<"Prodolzit vvod - 1";
                        cout<<endl<<"STOP - 0"<<endl;
                        cin>>temp;
        }while(temp!='0');
        //cout<<"i1="<<i<<endl;
}
 
void Poisk_po_nazvaniu_filma()
{
        char temp[50];
        cin>>temp;
        for (int j=i;j>=0;j--)
                        {
                                if(strstr(temp,mag[j].sNazvanie))
                {
                        cout<<mag[j].sNazvanie<<" ";
                                                cout<<mag[j].sReziser<<" ";
                                                cout<<mag[j].sZanr<<" ";
                                                cout<<mag[j].sReiting<<" ";
                                                cout<<mag[j].sChena<<" ";
                                }
                                cout<<endl;
                        }
}
 
void Poisk_po_zanru_filma()
{
        char temp[50];
        cin>>temp;
        for (int j=i;j>=0;j--)
                        {
                                if(strstr(temp,mag[j].sZanr))
                {
                        cout<<mag[j].sNazvanie<<" ";
                                                cout<<mag[j].sReziser<<" ";
                                                cout<<mag[j].sZanr<<" ";
                                                cout<<mag[j].sReiting<<" ";
                                                cout<<mag[j].sChena<<" ";
                                }
                                cout<<endl;
                        }
}
 
void Poisk_po_reziseru_filma()
{
        char temp[50];
        cin>>temp;
        for (int j=i;j>=0;j--)
                        {
                                if(strstr(temp,mag[j].sReziser))
                {
                        cout<<mag[j].sNazvanie<<" ";
                                                cout<<mag[j].sReziser<<" ";
                                                cout<<mag[j].sZanr<<" ";
                                                cout<<mag[j].sReiting<<" ";
                                                cout<<mag[j].sChena<<" ";
                                }
                                cout<<endl;
                        }
}
 
 
void Polar_zanr()
{
        int popular_poiskr=0,popular_temp=0;
        char temp[50];
        cin>>temp;
        for (int j=i;j>=0;j--)
                        {
                                if(strstr(temp,mag[j].sZanr))
                {
                        if (mag[j].sReiting>popular_poiskr) popular_poiskr=j;
                                }
                        }
        cout<<mag[popular_poiskr].sNazvanie<<" ";
        cout<<mag[popular_poiskr].sReziser<<" ";
        cout<<mag[popular_poiskr].sZanr<<" ";
        cout<<mag[popular_poiskr].sReiting<<" ";
        cout<<mag[popular_poiskr].sChena<<" ";
        cout<<endl;
}
3
2 / 2 / 0
Регистрация: 09.09.2013
Сообщений: 51
11.11.2013, 19:07 9
Цитата Сообщение от ForEveR Посмотреть сообщение
А так?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Searchname(char *name)
{
        for(int i=0; i<col;i++){
                if (strcmp(name, film[i].name)==0){
                        cout<<"Название фильма: "<<film[i].name<<"\n";
                        cout<<"Режиссер фильма: "<<film[i].regis<<"\n";
                        cout<<"Жанр фильма: "<<film[i].genre<<"\n";
                        cout<<"Рейтинг фильма: "<<film[i].rate<<"\n";
                        cout<<"Цена диска с фильмом: "<<film[i].price<<"\n";
                }
                else
                        cout<<"Фильм с таким названием не найден";
        }
}
Тогда на экран выводится результат + несколько раз повторяется "Фильм с таким названием не найден", не зависимо от того есть ли этот фильм. Как сделать так, что бы выводило только когда нужно?
0
0 / 0 / 0
Регистрация: 12.11.2022
Сообщений: 2
12.11.2022, 18:44 10
Спасибо,очень помог
0
12.11.2022, 18:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.11.2022, 18:44
Помогаю со студенческими работами здесь

«Структура в структуре» - как правильно называется?
Как инициализируется и для чего может быть использована?

Указатели + структура, а в структуре 2-мерный массив
11111

структура в структуре: есть ли доступ к объектам вложенной структуры из объекта первой?
Доброго времени суток! Есть структура в структуре: struct Time struct Time

Как можно сравнивать в структуре числа и выводить на экран по возрастанию, если структура находится в файле?
Как можно сравнивать в структуре числа и выводить на экран по возрастанию, если структура находится...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru