C中的函数没有返回正确的值

时间:2015-03-11 03:37:40

标签: c

我试图检查数组是否在不使用循环的情况下进行排序。它正常工作,即e。如果我有一个元素按升序排列的数组,则printf执行,因为我得到了#34; Sorted。"但

printf("Array 1 returns: %d \n\n", sortCheck(arr1, SORTED1));

返回0?为什么是这样?

感谢。这是整个代码。

#include<stdio.h>

const int SORTED1 = 5;

int sortCheck (int arr[], int arrSize);

int indexCounter = 0;

int main()
{
    int arr1[] = {1,2,3,4,5};

    printf("Array 1: \n");
    printf("Array 1 returns: %d \n\n", sortCheck(arr1, SORTED1)); 


    indexCounter = 0; 
    return 0;
}

int sortCheck(int arr[], int arrSize)
{   
    if ( (arr[indexCounter]==arr[arrSize-1]) && (indexCounter==arrSize-1) )
    {
        printf("Sorted. \n");
        return 1;
    }
    if ( arr[indexCounter] <= arr[indexCounter+1] )
    {
        indexCounter++;
        sortCheck(arr, arrSize);
    }
    else
    {
        printf("Not sorted.");
        return 0;
    }   
}

3 个答案:

答案 0 :(得分:5)

由于缺少return语句,您看到了未定义的行为。

if ( arr[indexCounter] <= arr[indexCounter+1] )
{
    indexCounter++;

    // Problem. Missing return.
    sortCheck(arr, arrSize);
}

将违规行更改为:

    return sortCheck(arr, arrSize);

答案 1 :(得分:0)

以下更改应打印值1

int sortCheck(int arr[], int arrSize)
{   
    int val = 0;
    if ( (arr[indexCounter]==arr[arrSize-1]) && (indexCounter==arrSize-1) )
    {
        printf("Sorted. \n");
        return 1;
    }
    if ( arr[indexCounter] <= arr[indexCounter+1] )
    {
        indexCounter++;
        val = sortCheck(arr, arrSize);
        return val;
    }
    else
    {
        printf("Not sorted.");
        return 0;
    }   
}

答案 2 :(得分:0)

sortCheck()函数不检查数组是否已排序。

这有两个原因。

1)当调用递归调用时,返回的值被忽略,因此有关特定字节对的信息将丢失。

2)始终传递索引(arrSize),而不是当前字节索引的偏移量

即。整个sortCheck()函数需要重新设计。

在调用递归sortCheck()的路径中使用调试器(或参数的printf)可以揭示这一事实。