C程序:要求用户定义数组的长度

时间:2016-07-24 15:26:41

标签: c

我是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;

2 个答案:

答案 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;

希望这会有所帮助