-2

好的,所以我试图记录一个函数在 while 循环中运行的次数,直到满足条件。效果不太好。当 while 循环开始时,它似乎需要永远完成并崩溃,而它应该只需要运行两次循环。有什么建议吗?

这是我到目前为止所拥有的:

void reverseArray (int arr[], int m){
    int arr2 [100000000];

    for (int i = m-1, d = 0; i >= 0;i--, d++)
        arr2[d] = arr[i];

    for (int i=0; i<m; i++)
        arr[i] = arr2[i];

}

int main (){ // score, score = time number is reversed
    int points=0, n, m;
    int arr[10];


    scanf ("%d", &n);

    printf("Enter the array elements\n");

    for (int i=0; i<n; i++)
        scanf("%d", &arr[i]);

    m = arr[0];

    while (m!=1){
        void revereseArray (int arr[], int m);
        points ++;
    }

    printf ("\n\n%d", points);
}

这样做的目的是获取一个数组并重新组合它,直到第一个元素等于 1。我还必须查看我必须运行该函数多少次,直到第一个元素等于 1。

现在,我不必在 while 循环中运行该函数,直到满足条件。

谢谢

4

1 回答 1

4

您的代码有几个问题。第一个,它完全阻止你的while循环完成,是你实际上并没有改变m循环中的值。因此,循环永远运行并且不能终止。

线

void revereseArray (int arr[], int m);

不是函数调用,而是调用函数的函数声明revereseArray。它在循环内不做任何事情。如果你想调用一个函数,你必须写

reverseArray(arr, m);

最后,请注意,当您调用时reverseArray,您的程序可能会因为int arr2 [100000000];太大而立即崩溃(您在堆栈上分配了 400MB)。如果您使用的是 C99,则可以制作 VLA: int arr2[m]. 否则,您必须在返回之前使用malloc一个临时数组和free它。

于 2013-08-02T23:47:49.710 回答