我是C的新手。我试图想办法让用户定义数组的长度。你能给我一个这样做的例子吗?我知道这个dosnt工作,因为它给我一个分段错误。只需要一个例子,这样我就可以重写我的代码了。谢谢!
case 3:
srand(time(NULL));
printf("How many time do you want to roll a dice? ");
scanf("%d", &DiceRoll);
for (k = 0; k < DiceRoll;++k)
{
MyArray[p] = rand()% 6 +1;
}
DiceFill(MyArray,DiceRoll);
break;
答案 0 :(得分:1)
您可以使用malloc()
分配缓冲区。
int* MyArray; /* declaretion of pointer variable: use the type you want to use for element */
/* ... */
case 3:
srand(time(NULL));
printf("How many time do you want to roll a dice? ");
if (scanf("%d", &DiceRoll) != 1) /* you should check if readings are successful */
{
puts("read error");
break;
}
MyArray = malloc(sizeof(*MyArray) * DiceRoll); /* allocate buffer */
if (MyArray == NULL) /* check if allocation is successful /*/
{
perror("malloc");
break;
}
for (k = 0; k < DiceRoll;++k)
{
MyArray[p] = rand()% 6 +1;
}
DiceFill(MyArray,DiceRoll);
break;
注意:您对srand()
的使用并不完全糟糕,但闻起来很香。相关文章:c - srand() — why call it only once? - Stack Overflow
答案 1 :(得分:0)
上面的代码存在一些问题,用户要求掷骰子的次数并不重要,因为你只将最后的结果放在MyArray中[p](p并没有在整个过程中发生变化for loop)。
回答你的问题,你可以使用malloc,因为人们已经这样回答:
int *MyArray = malloc(sizeof(int) * some_array_size);
从C-90开始,您也可以像这样在堆栈上分配数组:
int[some_array_size] MyArray;
希望这会有所帮助