[英]Passing an array to a function then print that array in main function
编写一个掷骰子游戏。 该游戏应允许用户一次最多掷六个骰子。 每次掷骰子都会存储在一个六元素数组 integer 中。 该数组将在 main() function 中创建,但传递给一个名为 tossDie() 的新 function。 tossDie() function 将负责生成从 1 到 6 的随机数,并将它们分配给适当的数组元素编号。 掷骰子后,main() function 应该显示骰子的生成值。
以上是我的问题。
我在 tossDie function 中使用了一个数组,但是当打印了 tossDie function 中的数组时。 该数组中的元素超过六个,我无法控制,元素不是 1 到 6 之间的随机数。这是我的方法:
#include <iostream>
#include <time.h>
#include <stdlib.h>
int tossDie(int [], int);
int main() {
srand(time(0));
int a[6]= {'\0'};
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;
}
主要声明:
您的代码可能会受益于全面的评论,所以让我们从主要声明开始。 该标准明确指出:
它 [main] 应定义为返回类型 int 且不带参数。
之间有区别
int main()
和
int main(void)
第一个占用任意数量的 arguments,第二个不占用。
神奇数字:
您在代码中使用了幻数 6、5 次。 考虑改用定义预处理器:
#define MAX 6
它更容易更改和维护。 您不希望在十几个地方而不是一个地方更改 6。
NULL 字节:
将 null 字节'\0'
替换为0
。
尺寸:
C 中确定数组大小的常用习惯用法是:
size_t size = sizeof (a) / sizeof (a[0]);
其中 sizeof(a) 是字节总数,sizeof(a[0]) 是一个元素的大小。
但是,当您已经将大小定义为 define 语句时,您不需要计算大小吗?
随机数生成器:
种子只能设置一次。 这个问题的答案srand() — 为什么只调用一次? 详细解释一下。
非法访问 MEMORY
for (i = 0; i <= 6; i++)
您在数组边界之外访问 memory,这是非法的。 没有分配的memory不要读取。
数组索引从 0 而不是 1 开始。因此数组的第六个元素位于索引 position 5。
原始问题:
处理完所有错误后,您可以在主 function 中使用 for 循环打印数组的所有值。
考虑将 function 的返回类型更改为 void,因为在修改它时不需要将数组返回给 main。 该数组衰减为 function 参数中的指针,因此它更像是一个别名。 它们都指向相同的 memory,如果您通过一个或另一个修改 memory,则两个 memory 都会被修改。
PS:如有不明之处,可追问。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.