2013-02-16 1 views
0

Предполагается, что он имитирует 2 6-сторонние кости, добавляя +1 к элементу массива, знакомому с результатом. Например: [4] содержит количество 4-х кадров. По какой-то причине, независимо от того, сколько раз он катится, он дает мне 1 для каждого элемента массива. То есть: (а [2] = 1, А = [3] 1, а [4] = 1, и т.д.)Простой массив не работает правильно

#include <iostream> 
#include <cmath> 
#include <cstdlib> 
#include <ctime> 

using namespace std; 

int throwDice()   // generates random number ranging 2-12 
{ 
    int x = (rand() % 6) + 1; 
    int p = (rand() % 6) + 1; 
    return x + p; 
} 


int main() 
{ 
    srand (time(NULL)); 
    int y; 
    cout << "Roll dice how many times?" << endl; 
    cin >> y; 

    int a2[12];     // initializes and declares elements a[2] - a[12] with value 0 
    for (int i = 2; i <= 12; i++) 
     a2[i] = 0; 

    for (int i = 0; i <= y; i++) // runs random number generator, adds +1 to that element 
     { 
     a2[throwDice()]++; 
     } 

    for (int i = 2; i <= 12; i++) // prints how many results per element 
    cout << i << " = " << throwDice[i] << endl; 
    system("pause"); 
} 
+0

Вы забиваете свои индексы. Нет 'a2 [12]' - последним объектом в 'a2' является' a2 [11] '. –

+0

Вместо использования массива, я предлагаю вам посмотреть, например. [ 'Станд :: unordered_map'] (http://en.cppreference.com/w/cpp/container/unordered_map). –

+0

@JoachimPileborg - это похоже на идеальный случай для массива (после сортировки индексации). Зачем добавлять накладные расходы неупорядоченной карты? –

ответ

2
cout << i << " = " << throwDice[i] << endl; 

должно быть

cout << i << " = " << a2[i] << endl; 

Вы должны всегда использовать -Wall при компиляции кода, который показал бы вам сразу, что-то не так:

Compilation finished with warnings: 
source.cpp: In function 'int main()': 
source.cpp:33:38: warning: pointer to a function used in arithmetic 
          [-Wpointer-arith] 

Кроме того, индексы массива начинаются с 0, поэтому для доступа к a2[12] он должен иметь размер 13 по крайней мере.


И, наконец, system("pause"); - сомнительная идея. Я предпочел бы cin.get(); ждать, пока пользователь нажмет любую клавишу.

+0

Новая проблема, теперь она работает только один раз. Поэтому, если я скачу 2321 раз, все = 0, за исключением 1 числа, которое = 1. – Foxic

+2

'int a2 [12]; for (int i = 2; i <= 12; i ++) a2 [i] = 0; 'выглядит противно. Массивы индексируются нулями. – 2013-02-16 18:50:16

+0

@ H2CO3 Да, я пропустил это сначала - спасибо! – us2012

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

  • Нет связанных вопросов^_^