0

これは、2 つの 6 面サイコロが投げられることをシミュレートし、結果を知っている配列の要素に +1 を追加することになっています。例: a[4] は、ロールされた 4 の数を保持します。なんらかの理由で、何回ロールしても、配列内のすべての要素に対して 1 が返されます。すなわち: (a[2] = 1、a[3] = 1、a[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");
}
4

1 に答える 1

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();ユーザーが任意のキーを押すのを待ちたいと思います。

于 2013-02-16T18:47:39.660 に答える