2017-01-04 16 views
-4

これは私のコードであり、動作しません。関数は値を返さない

前の位置にARRは、以下のものから大きい又は小さい場合であれば、そのiは配列の中でいくつかの点でARRの前の位置を値1

の場合に返すべきであるように、すべてのアレイのためのより大きいあなたはelseブロックに返すべきではない任意の助けのため

#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]'と同等になります。現在のチェックでは、配列全体が最初の2つの要素だけチェックされず、ループの中から 'return 1;'を移動して 'else if'を取り除き、' for(i = 0; i George

+1

あなたの関数は、配列の最初の2要素をチェックするだけで、 'if'の両方の枝で返されるためです。 – Barmar

答えて

0

を1つのので、その値を返す必要があります0感謝を従って、その後大きいです。これは、増加する2つの要素が見つかるとただちに1を返します。それは配列の残りの部分をチェックしません。その結果、関数は配列の最初の2つの要素をチェックします。

代わりに、アレイ全体を通過するまで待ちます。ループ内に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の条件があなただけのelse ifelseを使用する必要がありません、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