2013-08-02 10 views
-2

좋아요, 그래서 조건이 충족 될 때까지 함수가 while 루프 내에서 실행 된 시간의 점수를 유지하려고합니다. 너무 잘 풀리지 않습니다. 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); 
} 
이것의 포인트는 배열을 가지고 첫 번째 요소는 나는 또한 I가 얼마나 많은 시간을 볼 수 있습니다 1. 동일 때까지 재 조립하는 것입니다

첫 번째 요소가 1과 같을 때까지 함수를 실행하십시오.

이제 조건이 충족 될 때까지 while 루프 내에서 함수를 실행할 필요가 없습니다.

감사합니다.

답변

4

코드에 몇 가지 문제가 있습니다. 첫 번째로, while 루프가 전혀 끝내지 못하게하는 것은 실제로 루프에서 m의 값을 변경하지 않는다는 것입니다. 따라서 루프가 영원히 실행되고 종료 할 수 없습니다.

라인

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

함수 호출이 아니라 함수에 대한 함수 선언revereseArray을했다. 루프 내부에서는 아무 것도하지 않습니다. 당신이 함수를 호출하고 싶다면, 당신은

reverseArray(arr, m); 

마지막으로, 당신은 reverseArray를 호출 할 때 int arr2 [100000000];가 (당신이 스택에 400메가바이트를 할당하는) 너무 크기 때문에, 프로그램이 바로 즉시 중단 될 수 있습니다 작성해야합니다. C99을 사용하는 경우 VLA : int arr2[m]을 만들 수 있습니다. 그렇지 않으면 malloc 임시 배열 및 free 반환하기 전에합니다.

+0

감사합니다. 장래에 알아 두겠습니다. 간단한 질문에 사과드립니다. 마지막으로 함수를 올바르게 호출하고 배열을 20으로 할당하면 코드가 여전히 충돌하는 것 같습니다. 나는 "return m"이 while 루프에서 m의 값을 변경한다는 가정하에 있었고, 1과 같지 않으면 다시 실행할 수도있었습니다. 이것이 사실이 아닌가? –

+0

신경 쓰지 마라, 나는 그것을 고치는 길을 발견했다. 내 void 함수의 반환 값을 arr [10]으로 변경하고 while 루프에 m = arr [0]을 추가했습니다. 다시, 질문에 대해 유감스럽게 생각합니다. –

관련 문제