函数不返回任何值

时间:2017-01-04 22:49:43

标签: c arrays

这是我的代码而无效。

如果上一个位置的arr比后一个更大或更小,如果它对所有数组都更大,那么我应该返回值1

如果在数组的某个点上arr的prev位置更大然后跟随一个所以它应该返回值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");
}

2 个答案:

答案 0 :(得分: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 :(得分:-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;
}