2017-01-30 4 views
0

Это функция для линейного поиска, где я только с одной переменной х, которая является для поиска переменной объектаЛинейный поиск кода показывает, что мой товар не present.Please помочь мне сделать корректировки

int lsrch(int x) 
    {int i; 
    int arr[6] = {2,4,5,76,2,1}; 
    for(i=0;i<5;i++) 
    { 
     if(x==arr[i]) 
     { 
      return i; 
     } 
     else 
      return -1; 
    } 
    } 

    int main() 
    { 
     int a,b; 
     a=lsrch(76); 

76 присутствует поэтому он должен показать свой индекс местоположение, но он показывает -1 для обоих смысла и нет верно для 2-го теста

 b=lsrch(99); 
     printf("%d",a); 
     printf("%d",b); 
    } 
+0

Используйте отладчик и шаг за шагом через код, и эта проблема должна быть очень очевидно, очень быстро. –

+0

Вы игнорировали ошибки компилятора? Я получаю сообщение «a.c: 13: 5: warning: control может достигнуть конца не-void функции [-Wreturn-type]», которая указывает на проблему неуместного оператора return. –

+2

Пожалуйста, ** не ** резко изменить вопрос. Я вернул его к исходному вопросу. Изменение вопроса настолько резко делает все ответы недействительными - особенно изменение языка с C на Python !. Если у вас есть другой вопрос, задайте новый вопрос. –

ответ

2

Проблема заключается в том, что вы нарушаете из петли слишком рано.

int lsrch(int x) 
{ 
    int i; 
    int arr[6] = {2,4,5,76,2,1}; 
    for(i=0;i<5;i++) 
    { 
     if(x==arr[i]) 
     { 
      return i; 
     } 
     else 
      return -1;  // Incorrect 
    } 
} 

Как написано, как только ваш код находит номер, который не соответствует x, он возвращает -1. Он не будет продолжать проверять остальную часть чисел в arr.

Если вы компилируете с gcc -Wall -Werror, компилятор будет указывать на то, что вы сделали ошибку:

linsearch.c: In function ‘lsrch’: 
linsearch.c:17:1: warning: control reaches end of non-void function [-Wreturn-type] 
} 
^ 

Это означает, что вы ничего не возвращаются в том случае, когда заканчивается цикл - вызывает неопределенное поведение ,


Решение состоит в том, чтобы отложить return -1 до после того, как петля исчерпала все значения в arr.

Кроме того, ваша петля прекращается, когда i == 5, но вы не проверили последнее число в arr. Давайте используем макрос, чтобы избежать жесткого кода этого значения.

#define ARRAY_LEN(x) (sizeof(x)/sizeof(x[0])) 

int lsrch(int x) 
{ 
    int i; 
    int arr[] = {2,4,5,76,2,1}; 
    for(i=0; i<ARRAY_LEN(arr); i++) 
    { 
     if(x==arr[i]) 
     { 
      return i; 
     } 
    } 

    return -1; // Nothing left to check 
} 
+0

@BLUEPIXY Спасибо.Исправлено с помощью 'ARRAY_LEN'. –

+0

большое спасибо !!! Ошибка в программе исправлена. – DjVasu

+0

Я отредактировал вопрос. Можете ли вы помочь мне снова? – DjVasu

2

Логическая ошибка в коде - foloowing часть кода неверен -

if(x==arr[i]) 
    { 
     return i 
    } 
    else 
     return -1 

В самом первом проходе, если условие принимает значение ложь, и возвращается -1.

Правильный код -

int lsrch(int x) 
    { 
    int i; 
    int arr[6] = {2,4,5,76,2,1}; 
    for(i=0;i<=5;i++) 
    { 
     if(x==arr[i]) 
     { 
     return i; 
     } 

    } 
     return -1; 
    } 

    int main() 
    { 
     int a,b; 
     a=lsrch(76); 
    return 0; 
    } 
+2

Вместо того, чтобы просто отправлять «фиксированный» код, возможно, вы могли бы указать OP * what *, который вы изменили? Что делает эту работу? –

+0

@Some программист чувак. Я отредактировал свой ответ. Спасибо за отзыв –

0
int lsrh(int x){ 
    int i,a[6]={2,4,5,76,2,1}; 
    for(i=0;i<6;i++){ 
     if(a[i]==x) 
      return i; 
     } 
    return -1; 
} 

использование этого он будет работать