2015-03-11 3 views
1

Я пытаюсь проверить, отсортирован ли массив без использования цикла. Он работает нормально, т.е. если у меня есть массив с элементами, которые находятся в порядке возрастания, printf выполняется, так как я получаю «Сортировка». НоФункция в C не возвращает правильное значение

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; 
    } 
} 
+0

Вы * необходимо * либо включить предупреждение от компилятора, или начать платить внимание на них, это сэкономит вам много энергии. Если вы используете GCC, привыкните к компиляции с помощью 'gcc -Wall -Werror'. –

ответ

5

Вы видите неопределенное поведение из-за отсутствующего заявления return.

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

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

Изменение обижая линии:

return sortCheck(arr, arrSize); 
+0

Работает сейчас. Спасибо !! не может принять ответ, хотя !! – Lucas

+0

@Meryll, рад, что он сработал. –

+0

это не касается основной проблемы с функцией sortCheck(), которая фактически не проверяет, отсортирован ли массив – user3629249

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; 
    } 
} 
0

функция sortCheck() не проверяет, если массив отсортирован.

Есть две причины для этого.

1) при вызове рекурсивного вызова возвращаемое значение игнорируется, поэтому информация о конкретной байтовой паре теряется.

2) индекс (arrSize) всегда передается, а не смещение на текущий индекс байтов

И.Е. вся функция sortCheck() должна быть переработана.

Использование отладчика (или Е (параметры) в пути, который вызывает рекурсивный sortCheck() показал бы, что факт.

Смежные вопросы