2017-01-04 3 views
-4

이것은 내 코드이며 작동하지 않습니다.함수가 아무 값도 반환하지 않습니다.

상기 PREV 위치에 도착이 수행 하나에서 크거나 작은 경우 경우 해당 I 배열의 어느 시점에 도착의 이전 위치를 값 1

을 경우 반환해야하므로 모든 어레이 큰 다음 중 하나 그렇게 그 어떤 도움

#include <stdio.h> 
#include <stdlib.h> 
int Up_array(int *arr,int Size) 
{ 
    int i; 
    for(i=0;i<Size;i++) 

     if (arr[i] > arr[i+1]) 
     { 
      return 0; 
     } 
     else if(arr[i] <= arr[i+1]) 
     { 
      return 1; 
     } 
}  

void main() 
{ 
int *arr,Size,i; 

    printf("please enter the size of the array\n"); 
    scanf("%d",&Size); 
    arr=(int*)malloc(Size*sizeof(int)); 
    printf("please enter the array\n"); 
    for (i=0; i<Size ;i++) 
     scanf("%d",&arr[i]); 
    Up_array(arr,Size); 
    free(arr); 
    system("pause"); 
} 
+1

에서 [투어]를하시기 바랍니다 (https://stackoverflow.com/tour)이 [MCVE]를 작성하는 법을 배워야가 (https://stackoverflow.com/help/mcve) 및 [Rubber Duck] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)에 문의하십시오. 우리에게 * 구체적인 * 질문이 있습니까? –

+0

'arr [i + 1]'는 어떤 점에서 UB를 호출 할 수 있습니다. 범위를 벗어나는'arr [Size]'와 같습니다. 현재 검사가 주어 지더라도 전체 배열은 처음 두 요소 만 검사하지 않고 루프에서 'return 1;'을 이동하여 'else if'를 없애고 루프를 for (i = 0; i <크기 -1, i ++)'. 나는 그것이 당신이 원하는 것을 할 것이라고 생각하지만, 질문으로부터 알기가 정말로 어렵다. – George

+1

함수는 배열의 처음 두 원소를 검사한다. 왜냐하면 그것은'if'의 두 가지 분기를 반환하기 때문이다. – Barmar

답변

0

당신은 else 블록에 반환하지 않아야의 값 0 감사를 반환해야 따릅니다 크다. 이것은 증가하는 두 개의 요소를 찾자 마자 즉시 1을 반환 할 것이고, 나머지 배열을 검사하지 않을 것입니다. 결과적으로 함수는 배열의 처음 두 요소를 확인합니다.

대신 전체 배열을 찾을 때까지 기다리십시오. 루프 내부에 0을 반환하지 않았다면 모든 요소가 오름차순임을 의미하므로 1을 반환 할 수 있습니다.

iSize - 2 일 때 배열을 중지해야하므로 arr[i+1]이 여전히 배열 안에 있도록 배열 밖에서 액세스하지 않아야합니다. else if의 조건이 if 조건의 정반대 때

int Up_array(int *arr,int Size) 
{ 
    int i; 
    for(i=0;i<Size-1;i++) 
    { 
     if (arr[i] > arr[i+1]) 
     { 
      return 0; 
     } 
    } 
    return 1; 
}  

그리고 일반적으로

, 당신은 단지 else하지 else if를 사용해야합니다.

-1

거의 옳았습니다. 여기에 코드입니다 :

#include <stdio.h> 
#include <stdlib.h> 
int up_array(int *arr,int Size) 
{  
    // Checking corner case where Size = 1 (no index out of bound) 
    if(Size > 1) { 
     for(int i=0; i<Size-1; ++i) { 
      if (arr[i] > arr[i+1]) { 
       return 0; 
      } 
     } 
    } 
    return 1; 
}  

int main() 
{ 
    int *arr,Size; 

    printf("Please enter the size of the array:\n"); 
    scanf("%d",&Size); 
    arr=(int*)malloc(Size*sizeof(int)); 
    printf("Please enter the array (press enter after any number)\n"); 
    for (int i=0; i<Size ;i++) { 
     scanf("%d",&arr[i]); 
    } 

    printf("Result %d", Up_array(arr,Size)); 

    free(arr); 
    return 1; 
} 
+2

'for()'조건이 즉시 실패하고 루프가 실행되지 않기 때문에'if (Size> 1)'이 필요하지 않습니다. – Barmar

+1

[둘러보기] (https://stackoverflow.com/tour)를 방문하십시오. 단지 설명없이 코드를 버리는 것은 좋은 대답으로 간주되지 않습니다. * 당신이 한 일을 어떻게 * 왜 *했는지 설명하십시오. –

+0

@ HermannDöppes는 당신이 말한 것을 실제로 제안하는 [TOUR] (https://stackoverflow.com/tour) 부분을 인용 해 주시겠습니까? – Michi

관련 문제