Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача массива структур в ф-цию 
:(
    Опции темы
bFree
Дата 25.4.2012, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 9.11.2008

Репутация: нет
Всего: нет



Здравствуйте!
Мучаюсь с предачей массива структур в ф-цию (в которой его нужно будет осортировать по полю структуры)

Вот сейчас такой код:
Код

const int S_COUNT = 3; // Количество структур

struct NOTE { 
        char name[50], surname[50]; 
        unsigned int phone; 
        unsigned int birth[2]; 
    } NOTES[S_COUNT];
    

void sort_by_birth(NOTE* NOTES, const int size) {
    int t = 1;
    cout << NOTES[0].birth[0]; // Тут всегда 0, а должно быть первое введенное значение
    while(t == 1) {
        t = 0;
        NOTE tmp_note;
        for(int i = 0; i < size-1; i++) {
            for(int j = 2; j >= 0; j--) {
                if(NOTES[i].birth[j] > NOTES[i+1].birth[j]) {
                    
                    tmp_note = NOTES[i];
                    NOTES[i] = NOTES[i+1];
                    NOTES[i+1] = tmp_note;
                    t = 1;
                }
            }       
        }
    }
}


/* 
 * 
 */ 
int main(int argc, char** argv) { 

    for(int i = 0; i < S_COUNT; i++) {
        cout << endl << "Заполняем " << i << endl;
        
        cout << "Введите дату рождения ДД ММ ГГ: ";
        cin >> NOTES[i].birth[0] >> NOTES[i].birth[1] >> NOTES[i].birth[2];

        sort_by_birth(NOTES, i);
    }
    
    for(int i = 0; i < S_COUNT; i++) {
        cout << endl << "Выводим ";        
        cout << NOTES[i].birth[0] << NOTES[i].birth[1] << NOTES[i].birth[2] << endl;
    }
    
    return 0; 
}


Собственно попрос: как правильно передавать структуру в ф-цию? Достучаться до ее значений не получается =(

Гуглил, но везде предлагаются разные подходы и код тоже у всех в примерах разный. Уже совсем запутался.
PM MAIL   Вверх
disputant
Дата 25.4.2012, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 28.11.2011

Репутация: нет
Всего: 3



Да одного вот этого:

Код

 cin >> NOTES[i].birth[0] >> NOTES[i].birth[1] >> NOTES[i].birth[2];


в сочетании с 

Код

unsigned int birth[2];


достаточно, чтоб ничего не работало  smile 


PM MAIL   Вверх
bFree
Дата 25.4.2012, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 9.11.2008

Репутация: нет
Всего: нет



disputant, что некорректного в приведенных Вами выдержках?
При вводе данные корректно сохраняются и затем корректно выводятся внутри ф-ции main()
PM MAIL   Вверх
borisbn
Дата 25.4.2012, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(bFree @  25.4.2012,  11:24 Найти цитируемый пост)
что некорректного в приведенных Вами выдержках?

давай рассуждать логически:
1) Сколько элементов типа unsigned int занимает такое описание ?
Цитата
unsigned int birth[2];

2) Сколько элементов вводится в birth в этой строке ?
Цитата
cin >> NOTES[i].birth[0] >> NOTES[i].birth[1] >> NOTES[i].birth[2];

3) Сколько раз выполнится этот цикл ?
Цитата
for(int j = 2; j >= 0; j--) {
                if(NOTES[i].birth[j] > NOTES[i+1].birth[j])
...



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
bFree
Дата 25.4.2012, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 9.11.2008

Репутация: нет
Всего: нет



borisbn
1. Ох, Вы абсолютно правы, моя опечатка! Конечно должно быть три. Я по-привычке начал с нуля считать =)

Эту ошибку я понял! Спасибо!
PM MAIL   Вверх
borisbn
Дата 25.4.2012, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



bFree, тогда ещё 2 вопроса
1) Обязательно ли сортировать данные при вводе или можно сначала ввести все данные, а затем вызвать ф-цию сортировки ?
2) На каком языке нужно написать программу ? На Си или на Си++ ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
bFree
Дата 25.4.2012, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 9.11.2008

Репутация: нет
Всего: нет



borisbn
1. Нет, не обязательно
2. С++
PM MAIL   Вверх
borisbn
Дата 25.4.2012, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135





--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
bFree
Дата 25.4.2012, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 9.11.2008

Репутация: нет
Всего: нет



borisbn, Ох, вот это да! Огромнейшее спасибо! Сейчас буду разбираться в алгоритме ) Все таки самому интересно..

Кстати, вот еще вопрос: есть ли вообще смысл использовать unsigned int?. Ведь можно только понасоздавать трудноуловимых ошибок, если где-то в середине программы получится число со знаком..
PM MAIL   Вверх
bsa
Дата 26.4.2012, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



bFree, ты должен сам в каждый конкретный момент решать для себя, какой тебе тип необходим. Если толком не знаешь, но уверен, что число должно быть целым, то используй int.
Например, операции сдвига работают только с положительными числами.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0883 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.