写一个掷骰子游戏。游戏应该允许玩家一次掷6个骰子。每抛一次Die将被存储在一个六元素整数数组中。该数组将在main()函数中创建,但要传递到一个名为tossDie()的新函数。tossDie()函数将负责生成随机数从1到6,并将它们赋给相应的数组元素号。掷完骰子后,main()函数应该显示骰子的生成值。
以上就是我的问题。
我在tossDie函数中使用数组,但是当tossDie函数中的数组被打印时。数组中的元素多于6个,我无法控制元素也不是1到6之间的随机数。这是我的方法:
#include <iostream>
#include <time.h>
#include <stdlib.h>
int tossDie(int [], int);
int main() {
srand(time(0));
int a[6]= {' '};
int size = 6;
tossDie(a, size);
// printf("The dice results: n%d", a);
}
int tossDie(int dice[6], int size){
srand(time(0));
int i =0;
for (i =0; i<=6 ; i++){
dice[i] = 1 + rand()%(6);
printf(" %d", dice);
}
return 0;
}
主声明:
你的代码可以受益于一个整体的批评,所以让我们从主声明开始。该标准明确规定:
It [main]定义的返回类型为int,不带形参。
int main()
和
int main(void)
第一个接受任意数量的参数,第二个不接受。
神奇数字:
您在代码中使用了神奇数字6,5次。考虑使用定义预处理器:
#define MAX 6
更容易更改和维护。你不会喜欢在十几个地方改6,而不是只改一个。
零字节:
将空字节' '
替换为0
。
大小:
C语言中确定数组大小的常用习惯是:
size_t size = sizeof (a) / sizeof (a[0]);
其中sizeof(a)为总字节数,sizeof(a[0])为单个元素的大小。
但是,当您已经在define语句中定义了大小时,您将不需要计算大小。
随机数生成器:
种子应该只设置一次。这个问题的答案是()-为什么只调用一次?详细解释一下。
访问非法内存
for (i = 0; i <= 6; i++)
访问数组边界之外的内存,这是非法的。不应该读取未分配的内存。
数组索引从0开始而不是从1开始。因此,数组的第六个元素位于索引位置5。
原始问题:
可以在main函数中使用for循环,在处理完所有错误后打印数组的所有值。
考虑将函数的返回类型更改为void,因为在修改数组时不需要将数组返回给main。数组在函数形参中衰减为指针,因此它更像是一个别名。它们都指向同一个内存,如果你通过一个或另一个修改内存,内存将被同时修改。
p。S:如果你有不清楚的地方,你可以要求澄清。