Slot Machine. Помогите найти ошибку.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Приветствую. Пришла мне в голову идея, написать программу — слот машина. Проще говоря игровой автомат, на 3 ячейки. Взялся, кодил, скомпилировал, исправлял ошибки(как же без них). Появилась проблема, когда уже все компилируется и открывается конечный результат, выдает окошко «Закрыть программу», я думаю программа уходит в бесконечный цикл. Люди добрые, укажите своими пальцами на мои «позорные» ошибки, что я сделал не так? Буду признателен.
(1) Программа не компилится. Не хватает
#include <cstdlib>
.(2) При таком условии завершения цикл
for (int i=0; i<=3; i++)
выполняется 4 раза. Т.е. имеем выход за границу массива в операторе присваивания. Как следствие ты получаешь Segmentation fault. Должно бытьfor (int i=0; i<3; i++)
.(3) За рекурсивный вызов функции (
lotMachine()
) вместо использования цикла надо расстреливать при большом стечении народа.(4) Никогда не играл со слот-машиной, но у меня большое подозрение, что условие для джекпота написано неправильно:
(5) В ф-ции
main()
операторsystem("pause")
никогда не будет выполняться, поскольку поreturn 0
ф-ция завершит свою работу.(6) С точки зрения эффективности, я бы заменил
string lot[3];
наconst char *lot
, поскольку как массив переменнаяlot
по сути не используется.(7) Достаёт писать полностью yes для продолжения работы программы. Я бы посоветовал использовать функцию
getch()
из<conio.h>
и сделать не продолжение по y, а завершение по n.(1) Спасибо, понял.
(2) Дурная моя голова, с самого начала изначально было 4 лота, но потом я решил уменьшить их до 3. При этом не уменьшив итерации цикла на 1. Благодарю.
(3) Не понял, как понять?
(4) Возможно, перепроверю свое условие.
(5) По случайности поменял местами. Я не внимателен :)
(6) Разве? По моим расчетам, которые на листочке, алгоритм выполняется 3 раза(если 3 лота), и каждое рандомное число проверяется условием, и в массив lot[i], где i — номер лота, записывается название Мартышка, Золото или Семерка.
(7) Хм, это хорошо, перепишу на данную функцию, после ее изучения :)
Спасибо за указания моих ошибок, учту!
Вот переписал, но, опять проблема. Всегда генерирует одни и те же лоты. Проверьте, кому не лень?
Вынеси
srand(time(NULL));
из цикла (лучше вообще перенеси в началоmain()
) — время не успевает изменяться, поэтому генератор случайных чисел трижды стартует с одинакового значения.За использование неконтролируемой рекурсии вместо цикла тебя ещё не расстреляли?!
return a,b,c;
— это бред. Функция в С/С++ может вернуть только одно значение (в данном случае будет возвращено значениеc
).Джекпот (и пр. комбинации) не отлавливаются.
Использование глобальных переменных следует избегать.