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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Hunger Cannibal
2 / 2 / 0
Регистрация: 17.04.2013
Сообщений: 15
#1

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

31.05.2013, 10:24. Просмотров 282. Ответов 7
Метки нет (Все метки)

Здравствуйте. Застопорился с одним заданием, ничего не придумывается, поможите кто чем может ). Итак:
Имеем массив следующих структур

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++
Я создал такую структуру class Lancuch { public: char cos; Lancuch * nastepny; }; Lancuch * poczatek=NULL; cin >>...

Как объявить динамический массив структур, и как выглядит обращение к полям структур по указателю? - C++
Ребята подскажите как объявить динамический массив структур, и как выглядит обращение к полям структур по указателю.

Массив структур в массиве структур - C++
Всем добрый день. Делаю менюшку для управления и терзаю Arduino IDE слегка подвис со следующей задачей. Я хочу определить две...

Ввести массив структур; рассортировать массив в алфавитном порядке - C++
Пришел из армии восстановился в универе и тут сразу курсавай. Помогите Исходные данные(описание структуры): Информация об...

Как передать массив структур в функцию в качестве параметра, чтобы изменения в функции меняли исходный массив? - C++
Допустим есть структура struct Base { int a; int b; int c; }; В основном методе main() объявим массив...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Чиффа
5 / 5 / 0
Регистрация: 24.09.2012
Сообщений: 58
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
Кактус
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
Сообщений: 15
31.05.2013, 11:21  [ТС] #4
А я по неопытности своей надеялся, что есть красивое и неведомое мне средство ))).
Всем спасибо за поддержку!!.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
Сообщений: 15
31.05.2013, 11:56  [ТС] #6
я до этого не дочитал ещё )))
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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;
    }
// ... другие ветки
}
eocron
Кактус
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
31.05.2013, 19:32 #8
Да, я много багов рождаю. Моя беда. Я бы сделал просто через метод, так как больше люблю с объектами работать, но вижу что человек не освоил это и сделал тяп ляп.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2013, 19:32
Привет! Вот еще темы с ответами:

Имеем 3 одномерных материальных массива А(10), В(10), С(10) - C++
Имеем 3 одномерных материальных массива А(10), В(10), С(10). Для каждого из них с помощью процедур найти количество и сумму отрицательных...

массив структур - C++
Написать функцию для создания массива записей со сведениями о студентах (ФИО, возраст, курс, успеваемость). По заданному массиву...

Массив структур - C++
Информация о дисциплине содержит название, количество часов лекций, количество часов практических занятий, фамилию преподавателя. Вывести...

массив структур - C++
как записать массив структур в файл и как его от туда вытащить?? что прописывать???


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
31.05.2013, 19:32
Ответ Создать тему
Опции темы

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