Форум программистов, компьютерный форум CyberForum.ru

Имеем массив структур - C++

Восстановить пароль Регистрация
 
Hunger Cannibal
2 / 2 / 0
Регистрация: 17.04.2013
Сообщений: 13
31.05.2013, 10:24     Имеем массив структур #1
Здравствуйте. Застопорился с одним заданием, ничего не придумывается, поможите кто чем может ). Итак:
Имеем массив следующих структур

C++
1
2
3
4
5
6
7
struct spisok                  
    {
    char fullname[strsize]; 
    char title[strsize];    
    char nickname[strsize];  
    int preference;         // 0 = полное имя, 1 = титул, 2 = ник
    };
Программа запускает цикл, который даёт возможность пользователю выбирать разные альтернативы:

a. display by name b. display by title
c. display by nickname d. display by preference

Выбор "display by preference" не означает, что нужно отобразить член preference; это значит, что необходимо отобразить член структуры, который соответствует значению preference (0 = полное имя, 1 = титул, 2 = ник).

Вот с этим последним пунктом и загвоздка - как вытянуть член структуры по номеру ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2013, 10:24     Имеем массив структур
Посмотрите здесь:

Массив структур C++
Массив структур C++
Массив структур C++
Массив структур C++
C++ Имеем 3 одномерных материальных массива А(10), В(10), С(10)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Чиффа
 Аватар для Чиффа
5 / 5 / 0
Регистрация: 24.09.2012
Сообщений: 54
31.05.2013, 10:53     Имеем массив структур #2
можно использовать свитч, получается немного громоздко, но как вариант..., ещё думаю можно использовать enum, но в голову не приходит как.
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
#define strsize 250
 
struct spisok
{
char fullname[strsize];
char title[strsize];
char nickname[strsize];
int preference; // 0 = полное имя, 1 = титул, 2 = ник
};
 
int main()
{
    spisok one;
    one.fullname ;
    one.title;
    one.nickname;
    one.preference;
 
    cin >> one.fullname;
    cin >> one.title;
    cin >> one.nickname;
    cin >> one.preference;
    int per;
    cin >> per;
    switch (per)
    {
    case 0:
    cout << one.fullname;
        break;
    case 1:
    cout << one.title;
        break;
    case 2:
    cout << one.nickname;
        break;
    case 3:
        switch (one.preference)
        {
            case 0:
            cout << one.fullname;
                break;
            case 1:
            cout << one.title;
                break;
            case 2:
            cout << one.nickname;
                break;
        }
        break;        
    }
    
    return 0;
}
eocron
Кактус
 Аватар для eocron
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
31.05.2013, 10:56     Имеем массив структур #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
char *GetByPref(spisok res)
{
    if(res.preference == 0)
    {
              return res.fullname;
    }
    else if(res.preference == 1)
    {
             return res.title;
    }
    else if(res.preference == 2)
    {
             return res.nickname;
    }
}
....
 GetByPref( T )[0]  - первый символ того, что выдал по преференсе в элементе T
Hunger Cannibal
2 / 2 / 0
Регистрация: 17.04.2013
Сообщений: 13
31.05.2013, 11:21  [ТС]     Имеем массив структур #4
А я по неопытности своей надеялся, что есть красивое и неведомое мне средство ))).
Всем спасибо за поддержку!!.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
31.05.2013, 11:43     Имеем массив структур #5
Т.к. все поля в структуре однотипны, можно переделать на :
C++
1
2
3
4
5
struct spisok 
{
   char field[3][strsize]; 
   int preference; // 0 = полное имя, 1 = титул, 2 = ник
};
и выводить просто:
C++
1
2
spisok* s = ... // получили нужный элемент
cout << s->field[s->preference];
Hunger Cannibal
2 / 2 / 0
Регистрация: 17.04.2013
Сообщений: 13
31.05.2013, 11:56  [ТС]     Имеем массив структур #6
я до этого не дочитал ещё )))
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
31.05.2013, 11:59     Имеем массив структур #7
eocron, у Вас возвращается указатель на локальные для функции данные. Так делать нельзя, т.к. после выхода из функции res со всеми полями будет уничтожен.
Если уж делать ветвление по Вашему принципу, нужно передавать в функцию указатель или ссылку:
C++
1
2
3
4
5
6
7
8
char *GetByPref(spisok* res)
{
    if(res->preference == 0)
    {
              return res->fullname;
    }
// ... другие ветки
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2013, 19:32     Имеем массив структур
Еще ссылки по теме:

Ввести массив структур; рассортировать массив в алфавитном порядке C++
Массив структур C++
Массив структур C++

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

Или воспользуйтесь поиском по форуму:
eocron
Кактус
 Аватар для eocron
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
31.05.2013, 19:32     Имеем массив структур #8
Да, я много багов рождаю. Моя беда. Я бы сделал просто через метод, так как больше люблю с объектами работать, но вижу что человек не освоил это и сделал тяп ляп.
Yandex
Объявления
31.05.2013, 19:32     Имеем массив структур
Ответ Создать тему
Опции темы

Текущее время: 12:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru