Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 而循环没有正确完成_C_Loops_While Loop_Counting - Fatal编程技术网

C 而循环没有正确完成

C 而循环没有正确完成,c,loops,while-loop,counting,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

好的,我试着记录函数在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);
}
void reversearlay(int arr[],int m){
国际货币汇率2[100000000];
对于(inti=m-1,d=0;i>=0;i--,d++)
arr2[d]=arr[i];

对于(int i=0;i而言,您的代码存在几个问题。第一个问题是,实际上您没有更改循环中
m
的值。因此,循环将永远运行,并且无法终止

线路

void revereseArray (int arr[], int m);
不是函数调用,而是名为
reversearray
的函数的函数声明。它在循环中不起任何作用。如果要调用函数,必须编写

reverseArray(arr, m);

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

谢谢,我以后会注意到这一点。对于这个简单的问题,我深表歉意。不过,最后一件事是,在正确调用函数并将对数组的分配减少到20之后,代码似乎仍然崩溃。我假设“return m”会更改while循环中m的值,如果它不等于1,可能会再次运行它。这不是真的吗?不管怎样,我找到了一种方法来修复它。我将void函数的返回值更改为arr[10],并在while循环中添加了一个m=arr[0]。再次为这些问题道歉。