我正在尝试模拟一个游戏,程序会询问用户他们想要掷出一对骰子的次数。然后,程序将显示每个总计滚动的次数。我们不允许使用数组我的程序不滚动或计算随机数。任何帮助表示赞赏。
#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 :(得分:3)
问题是你有两个循环而不是一个来记录滚动。您的代码会滚动并覆盖total
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++;
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 :(得分:1)
您需要将前两个循环合并为一个,否则total
将始终只是您制作的最后一个循环。
答案 2 :(得分:0)
总变量位于循环内部,因此它的值将在每个回合中被擦除。 进行第二次循环时,仅使用最后一个总值。
你有两个解决方案,
首先是构建一个数组并存储所有总值。然后在第二个循环中,您可以访问所有值。 其次,(简单的一个)是使用总的当前值。
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++;
// ...
}
如果您需要额外的解释,欢迎您。
答案 3 :(得分: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);
}