虽然循环没有正确完成

时间:2013-08-02 23:43:55

标签: c loops while-loop counting

好的,所以我试图保持一个函数在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循环中运行该函数,直到满足条件。

由于

1 个答案:

答案 0 :(得分: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