2016-09-17 5 views
-5

В этом коде есть некоторые ошибки при сбое, которые я должен найти, но у меня возникли проблемы с их поиском. Я потратил довольно много времени. Я уверен, что это что-то легкое, что я пропал без вести. когда я запускаю код в визуальной студии 2012 я получаю и ошибка индекс массиваимеет проблемы со школьным назначением

#include <iostream> // provides access to cin and cout 
#include <iomanip> 
#include <array> 

#include <vector> 


using namespace std; 

int main() 
{ 
    // seed random number generator 
    srand(time(NULL)); 

enum symbol 
{ 
    Lemon, Cherry, Orange, Bell, Jackpot 
}; 
// create a struct for slot machine wheel 
struct Wheel 
{ 
    array <string, 10> symbols; 
    array <symbol, 10> eSymbols; 
    int position; 
    string selected; 
}; 
//create an array of three slot machine wheels 
array <Wheel, 3> slotMachine = 
{ 
    { 
     { 
      {"Cherry", "Orange", "Lemon", "Orange", "Bell", "Orange", "Lemon", "Cherry", "Jackpot", "Bell"}, 
      {Cherry, Orange, Lemon, Orange, Bell, Orange, Lemon,Cherry, Jackpot, Bell}, 
      0,"Cherry" 
     }, 
     { 
      {"Cherry", "Bell", "Lemon", "Orange", "Bell", "Jackpot", "Lemon", "Cherry", "Jackpot", "Bell"}, 
      {Cherry, Bell, Lemon, Orange, Bell, Jackpot, Lemon, Cherry, Jackpot, Bell}, 
      1,"Bell" 
      }, 
      { 
       {"Cherry", "Orange", "Lemon", "Orange", "Lemon", "Orange", "Lemon","Cherry", "Jackpot", "Bell"}, 
       {Cherry, Orange, Lemon, Orange, Lemon, Orange, Lemon, Cherry, Jackpot, Bell}, 
       2,"Lemon" 
      } 
    } 
}; 

bool gameOn = true; 
bool winner = false; 
int thePot = 100; 
int bet = 1; 
vector <int> combo; 
while (gameOn) 
{ 
    for (int i = 1; i < 4; i++) 
    { 
     slotMachine[i].position =(slotMachine[i].position + rand()%10)%10; 
     slotMachine[i].selected = slotMachine[i].symbols[slotMachine[i].position]; 
     cout << setw(10) << left << slotMachine[i].selected.c_str() ; 
     combo.push_back(slotMachine[i].eSymbols[slotMachine[i].position]); 
    } 
    if ((combo[0] == combo[1]) && (combo[1] == combo[2])) 
    { 
     if (combo[0] == Lemon) 
     { 
      cout << "You keep your bet." << endl; 
     } 
     else if(combo[0] = Jackpot) 
     { 
      cout << "**** You hit $1000 Jackpot!!! ****" << endl; 
      thePot += 1000; 
      winner = true; 
      gameOn = false; 
     } 
     else 
     { 
      cout << "WINNER! You win $" << combo[0]*5 << endl; 
      thePot += combo[0]*5; 
     } 
    } 
    else 
    { 
     thePot -= bet; 
     if (thePot > 0) gameOn=false; 
    } 
    cout << "You now have $" << thePot << endl; 
    combo.clear(); 
    cout << endl; 
    cin.get(); 
} 
if (winner) cout << "You walk away a winner." << endl; 
else cout << "You have lost all your money." << endl; 
// Wait for user input to close program when debugging. 
cin.get(); 
return 0; 
+0

Правильный инструмент для решения таких проблем - ваш отладчик. Перед тем, как просить о переполнении стека, вы должны пропустить свой код по очереди *. Для получения дополнительной информации, пожалуйста, прочтите [Как отлаживать небольшие программы (Эрик Липперт)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Как минимум, вы должны \ [изменить] ваш вопрос, чтобы включить пример [Минимальный, полный и проверенный] (http://stackoverflow.com/help/mcve), который воспроизводит вашу проблему, а также замечания, сделанные вами в отладчик. –

+0

Разбита ли ваша клавиша SHIFT, Леви? И как вы думаете, название этого вопроса поможет другим найти и получить помощь от должности в будущем? –

+1

Извините за то, что я опубликовал это в первый раз, используя этот сайт, и это первый класс, который я использовал в программировании. Спасибо за информацию о том, как отлаживать небольшие программы, это очень помогло. Я буду следить за тем, чтобы в следующем посте я подробно рассказывал о том, что я ищу. –

ответ

1

Вы объявили

array <Wheel, 3> slotMachine; 

После этого вы итерацию через этот массив следующим образом:

for (int i = 1; i < 4; i++) 
{ 
    slotMachine[i].position = 

Этот код будет получать доступ к slotMachine[1] через slotMachine[3], согласно логике цикла.

К сожалению, нет slotMachine[3], и попытка получить к нему доступ приводит к неопределенному поведению и вероятному сбою.

Массив или векторный элемент N элементов содержит элементы с номерами от 0 до N-1. Вы можете использовать свои пальцы, чтобы проверить этот факт.

Этот массив содержит slotMachine[0] через slotMachine[2], а не slotMachine[1] через slotMachine[3]. Вот как работают массивы и векторы на C++.

+0

Спасибо за помощь, я знал, что это было что-то очевидное, но я смотрел на экран некоторое время, выполняя другие части этого задания. В будущем я обязательно буду проверять более внимательно, прежде чем отправлять на этот сайт. –

Смежные вопросы