2017-03-02 3 views
-6
#include<stdio.h> 
int main() 
{ 
    int num[5], i, s, no; 
    for(i=0; i<5 ;i++) 
    { 
     scanf("%d",&num[i]); 
    } 
    printf("enter a number\n"); 
    scanf("%d", &no); 
    s=search(no, &num[0]); 
    printf("%d\n",s); 
    search1(no,num); 
} 

int i=0; 

int search(int no,int *num[i]) 
{ 
    int x,i; 
    for(i=0;i<5;i++) 
    { 
     if(no == *num[i]) 
     return 1; 
    } 
    return 0; 
} 

int search1(int no,int *num)  
{ 
    int i,x,k; 
    printf("your number %d is present in the list",no); 
    printf("number\tfrequency"); 
    for(i=0;i<5;i++) 
    { 
     for(x=0;x<i+1;x++) 
     { 
      k=0; 
      if(num[i]==num[x] &&i!=x) 
      { 
       k=0; 
       break; 
      } 
      else 
      { 
       k=1; 
       continue; 
      } 
     } 
     if(k==1) { 
      printf("%d",num[i]); 
     } 
    } 
} 

この質問は、配列を関数に渡すことに基づいています。私のコードはコンパイルされていますが、実行時に入力番号を尋ねた後、そのリストの存在を確認するために、セグメンテーションエラーが表示されます。なぜ私のプログラムのセグメンテーションエラー

+1

は、これは良いスタート点であってもよいです。それは良くありません。 – abelenky

+3

あなたのコードを他の人間が読むことは非常に困難です。あなたがコードを書く前に、受け入れられた書式スタイルを採用してください。私の見解では、あなたのコードを提示する方法は、あなたが考えているやり方を反映しています。 –

+0

...おそらくあなたの考えはあなたのタイプに先んじているかもしれませんが、厳密なフォーマットスタイルのもう一つの利点は、コードを準備する際に、それらの考えを考慮して検討する時間を許すということです。 –

答えて

0

を変更し、検索関数の宣言に:

int search(int no,int *num) 

変更するには、配列の要素にアクセスする方法:

if (no == num[i]) // Instead of *num[i] 

と呼んでそれが好き:

s=search(no,num) 

を私はあなたを考えます配列、ポインタ、引数の渡しについて混乱があります。 また、あなたの質問の下のコメントが既に指摘しているように、より良いコーディングスタイルを採用する必要があります。あなたのコードは本当に読みにくいです。あなたはグローバル変数 `i`を持って、あなたは完全にグローバル変数を隠すローカル変数` i`の多くを持って https://www.kernel.org/doc/Documentation/process/coding-style.rst

関連する問題