2014-03-18 4 views
0

Я пытаюсь имитировать игру, в которой программа спрашивает у пользователя, сколько раз они хотели бы бросить пару кубиков. Затем программа отобразит, сколько раз каждая общая сумма была развернута. Нам не разрешено использовать массивы. Моя программа не катит или не подсчитывает случайные числа. Любая помощь приветствуется.Dice Rolling Simulator, 2 Dice

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int main() { 
    int d2 = 0; 
    int d3 = 0; 
    int d4 = 0; 
    int d5 = 0; 
    int d6 = 0; 
    int d7 = 0; 
    int d8 = 0; 
    int d9 = 0; 
    int d10 = 0; 
    int d11 = 0; 
    int d12 = 0; 

    int k, roll_1, roll_2, num_roll, total, count = 0 ; 

    srand((long)time(NULL)); 

    printf("Enter number \n"); 

    scanf("%d", &num_roll); 


    for (k = 0; k < num_roll; k++) 
    { 
     roll_1 = rand() %6 +1; 
     roll_2 = rand() %6 +1; 
     total = roll_1 + roll_2; 
     count++; 
    } 

    for (k = 0; k < num_roll; k++) 
      { 
       if (total == 2) d2++; 
      else if (total == 3) d3++; 
      else if (total == 4) d4++; 
      else if (total == 5) d5++; 
      else if (total == 6) d6++; 
      else if (total == 7) d7++; 
      else if (total == 8) d8++; 
      else if (total == 9) d9++; 
      else if (total == 10) d10++; 
      else if (total == 11) d11++; 
      else if (total == 12) d12++; 
    for(k = 0; k < num_roll; k++) 
      { 
      perc = total/num_roll; 
      } 

    printf("Rolls: %i\n", num_roll); 

    printf(" 2: %d\n", d2); 
    printf(" 3: %d\n", d3); 
    printf(" 4: %d\n", d4); 
    printf(" 5: %d\n", d5); 
    printf(" 6: %d\n", d6); 
    printf(" 7: %d\n", d7); 
    printf(" 8: %d\n", d8); 
    printf(" 9: %d\n", d9); 
    printf(" 10: %d\n", d10); 
    printf(" 11: %d\n", d11); 
    printf(" 12: %d\n", d12); 

    return 0; 
    } 
+0

Где произносится 'perc'? –

+0

А, Спасибо, что напомнил мне! – user3434330

+0

«Не разрешено использовать массивы»? Это орехи, особенно если предлагаемое решение состоит в том, чтобы иметь переменные, называемые d1, d2 и т. Д. – slim

ответ

3

Проблема в том, что у вас есть две петли вместо одной для записи рулона. Ваш код перематывает и перезаписывает totalnum_roll раз. Затем вы зацикливаете и пытаетесь обновить количество раз, сколько раз прокачалось число. Это должно быть сделано в одном цикле:

for (k = 0; k < num_roll; k++) 
{ 
    roll_1 = rand() %6 +1; 
    roll_2 = rand() %6 +1; 
    total = roll_1 + roll_2; 
    count++; 

    if (total == 2) d2++; 
    else if (total == 3) d3++; 
    else if (total == 4) d4++; 
    // ... 
} 

Также отметим, что это тип конструкции, что switch оператор решает:

switch(total) 
{ 
    case 2: d2++; break; 
    case 3: d3++; break; 
    case 4: d4++; break; 
    case 5: d5++; break; 
    //... 
    default: //Error 
} 
+1

что я сказал, но лучше :) – AShelly

1

Вам нужно объединить первые две петли в один, или же total всегда будет только последний рулон вы сделали.

+0

Спасибо вам большое! Вы были так полезны! – user3434330

0

Общая переменная внутри цикла, так что это значение будет стираться на каждом шагу. Когда вы делаете второй цикл, будет использоваться только последнее общее значение.

У вас есть два решения,

Во-первых, это построить массив и хранить всю общую стоимость. Затем во втором цикле вы можете получить доступ ко всем значениям. Во-вторых, (простой) заключается в использовании текущего значения total.

for (k = 0; k < num_roll; k++) 
{ 
    roll_1 = rand() %6 +1; 
    roll_2 = rand() %6 +1; 
-> total = roll_1 + roll_2; 
    count++; 

    if (total == 2) d2++; 
    else if (total == 3) d3++; 
    else if (total == 4) d4++; 
    // ... 
} 

Если вам нужны дополнительные объяснения, пожалуйста.

0

Я едва могу представить, почему вам будет задана такая задача, но не будет разрешено использовать массивы. Это только научит вас вредным привычкам - из которых имена переменных a1, a2, ... - это один.

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

int *ptr = malloc(10 * sizeof(int)); /* This isn't an array, but it's as good */ 
memset(ptr,0,10);  /* Fill it with zeroes */ 

/* Let's roll */ 
for(i=0; i<num_roll; i++) { 
    int roll = rand() % 6 + rand() %6; /* Our dice have sides from 0 to 5 */ 
    *(ptr + roll * sizeof(int)) ++; /* increment the appropriate part of our "array" 
} 

/* Print the results */ 
for(int i=0; i<10;i++) { 
    /* Add 2 to every roll for display, as if our dice had sides from 1 to 6 */ 
    printf("There were %d rolls with value %d\n", *(ptr+i), i+2); 
}