2017-01-04 67 views
-4

這是我的代碼,它不工作。函數不返回任何值

如果在先前的位置的ARR是從跟隨一個更大或更小,如果其大於所有數組,所以我應該如果返回值1

在一些點陣列中的ARR的先前位置是更大然後然後按照之一,所以它應該返回值爲0感謝所有幫助

#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;我<尺寸-1;我++)'。我認爲這會做你想做的事情,但是很難從 – George

+1

這個問題中知道你的函數只是檢查數組的前2個元素,因爲它會在'if'的兩個分支中返回。 – Barmar

回答

0

你不應該在else塊返回。一旦找到兩個增加的元素,它將立即返回1,它不會檢查數組的其餘部分。結果,你的函數只檢查數組的前兩個元素。

取而代之,請等待,直到完成整個陣列。如果循環內沒有返回0,則表示所有元素都上升,因此您可以返回1

另外,您需要避免訪問數組外部,所以當iSize - 2時,需要停止數組,因此arr[i+1]仍然在數組內。

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 if病情的if情況正好相反,你應該只使用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

您不需要'if(Size> 1)',因爲'for()'條件將立即失敗並且循環永遠不會執行。 – Barmar

+1

請參考[Tour](https://stackoverflow.com/tour)。只是在沒有解釋的情況下拋棄代碼並不是一個好的答案。請解釋*如何*和*爲什麼*你做了你所做的一切。 –

+0

@HermannDöppes你會引用[TOUR](https://stackoverflow.com/tour)中的部分內容,它實際上暗示了你的意思嗎? – Michi