|
Модераторы: bsa |
|
yurk84 |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 65 Регистрация: 13.2.2009 Где: Москва Репутация: нет Всего: нет |
Здравствуйте! Пишу для себя программу, которая проводит чемпионат России по футболу. Пока с помощью двух функций провёл жеребьёвку для составления календаря и распечатку этой жеребьёвки как мне передать массив с результатами этой жеребьёвки? Заранее спасибо за помощь.
А вот и сама прога на данный момент:
|
|||
|
||||
ИванМ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 3 Всего: 23 |
какой массив нужно передать? ни одного в коде не нашел
если новый массив, то сначала нужно его создать или глобально или в main и потом передать уже в функцию (просто написав его имя) Это сообщение отредактировал(а) ИванМ - 10.4.2010, 19:48 |
|||
|
||||
yurk84 |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 65 Регистрация: 13.2.2009 Где: Москва Репутация: нет Всего: нет |
Я хочу передать массив под названием ClubJerNum, состоящий из 16 элементов, в которых содержатся жеребьёвочные номера для каждой из команд.
|
|||
|
||||
Friackazoid |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 148 Регистрация: 23.2.2006 Репутация: нет Всего: 3 |
yurk84,
Дело в том что в С нет типа данных массив. Массив в С это по сути указатель на первый элемент, дальше все зависит от программиста. В С массивы передаются в функцию через указатель. В вашем случае массив надо не только передать в функцию печати, но и сначала вернуть из функции жеребьевки
Однако, прошу обратить внимание что такая работа с указателя является крайне нежелательной, потому что чревата утечкой памяти, а настоящем рабочем приложении и уязвимостями переполнения. Однако, так как работа с указателя в С очень важна, постаралась ее показать. В даном конкретном случае имеет смысл воспользоваться советом ИванМ и сделать массив глобальным. Код такого варианта приводить не буду, это достаточно просто чтобы разобратся самому. P.S. если не скомпилируется прошу простить, написано прям в форуме. --------------------
Даже если тебя съели, то все равно есть два выхода.42Team блог |
|||
|
||||
yurk84 |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 65 Регистрация: 13.2.2009 Где: Москва Репутация: нет Всего: нет |
Большое спасибо за ответ, Friackazoid! Прога скомпилировалась за исключением, что null надо было написать как NULL. Но дело даже не в этом, а в том, что выданные результаты оказались совсем не те, что я хотел бы увидеть (а именно числа от 0 до 15). В чём может быть дело? Заранее спасибо, Friackazoid! Результаты были числа от -190 до 29441
Это сообщение отредактировал(а) yurk84 - 10.4.2010, 21:39 |
|||
|
||||
Friackazoid |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 148 Регистрация: 23.2.2006 Репутация: нет Всего: 3 |
Здесь как говорится отладчик вам в руки )
Вполне возможно стоит обратить внимание на то что операция ххх = ++num не только присвает ххх значение num увличенное на 1, но и уеличивает сам num. Также стоит обратить внимание на то что в ункции жеребьеки массив создается локально, следовательно память под него хранится в стеке, который по выходу из масива уничтожается\перезатирается. ;) --------------------
Даже если тебя съели, то все равно есть два выхода.42Team блог |
|||
|
||||
mes |
|
|||
любитель Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
yurk84, ловите
|
|||
|
||||
yurk84 |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 65 Регистрация: 13.2.2009 Где: Москва Репутация: нет Всего: нет |
Ну что ж, теперь всё работает как надо. Большое спасибо всем написавшим, и в особенности mes-у. Однако решение Friackazoid-а, как мне кажется, более востребованно, поскольку передача массива у него происходит с помощью указателя. Кстати, я совсем забыл сказать, когда я сам делал передачу массива в своей программе через указатель у меня получились такие же результаты как и Friackazoid-а, и потому я сразу написал на этот Форум. А если кто-то ещё предложит вариант через указатель - будет совсем здорово!
Кстати у меня отдельный вопрос к господину mes-у: что означает следующая запись кода:
Это сообщение отредактировал(а) yurk84 - 11.4.2010, 21:05 |
|||
|
||||
ИванМ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 3 Всего: 23 |
yurk84, а разве как-то по-другому можно массив передавать, кроме как через указатель? И как по-вашему mes его передал?
|
|||
|
||||
mes |
|
||||||||
любитель Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
% - это операция взятия остатка целочисленного деления , в нашем случае мы используем для исключения переполнения, т.е. для того чтоб результат вычисления был всегда в нужном диапозоне, т.е 0 <= n < JerSize в общем
это удобная альтернатива Вашей записи :
Добавлено через 2 минуты и 16 секунд
и
фактически одно и то же, и если нравится последняя запись то смело исправляйте |
||||||||
|
|||||||||
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |