2017-01-30 4 views
0

난 단지 항목 변수를 검색 할 수 있습니다 하나의 변수 X를 복용하고있는 곳은 선형 검색을위한 기능입니다 활용할 수 있도록 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); 
    } 
조건이 거짓 평가하고 -1이 반환되는 경우

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

첫 번째 패스 자체에서 - 코드에서

+0

사용을 디버거를 작동하며 코드를 단계별로, 그리고 문제는 매우 빠르게 아주 명백해야한다. –

+0

컴파일러 오류를 무시 했습니까? 나는 "a.c : 13 : 5 : warning : 제어가 비 공백 함수 [-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에 나머지 숫자를 확인하지 않습니다. - 정의되지 않은 동작을 일으키는

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

이것은 당신이 루프 마감을하는 경우 아무것도 반환하지 않는 것을 의미한다 : 당신이 gcc -Wall -Werror 컴파일하면

, 컴파일러는 당신이 실수를 한 것을 지적 할 것이다 .


용액 루프 arr의 값을 모두 소진 한 후return -1까지 연기한다.

또한 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 부분이 잘못되었습니다.

올바른 코드 -

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 *에 당신이 변경 한 것을 말할 수 있습니까? 이 작품을 만드는 이유는 무엇입니까? –

+0

@ 어떤 프로그래머 야. 나는 내 대답을 편집했다. 감사합니다. –

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

사용이이