2017-01-30 10 views
0

これは私が唯一の項目変数リニア検索コードは私の項目は私が修正

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); 
を検索するためである1変数xを取っている線形検索するための機能であるを支援present.Pleaseていないことを示していますそれは、そのインデックスの場所を示す必要がありますので

76が存在するが、それは示し-1両方の意味の両方は、第2のテストケースに当てはまる存在しない

 b=lsrch(99); 
     printf("%d",a); 
     printf("%d",b); 
    } 
条件がfalseと評価して-1が返された場合

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

最初のパスそのもので - あなたのコード内

+0

使用して、デバッガを動作しますし、コードをステップ実行し、問題は非常に迅速に非常に明白でなければなりません。 –

+0

コンパイラエラーを無視しましたか?私は "a.c:13:5:warning:制御が空白でない関数[-Wreturn-type]の終わりに到達する可能性があります。これは誤った返信ステートメントの問題を指しています。 –

+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

@ Some Programmer dude。私は私の答えを編集しました。フィードバックありがとうございました –

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

使用このことは

関連する問題