2017-03-02 97 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

你有一個全局變量'i',和你有很多局部變量'i',這完全隱藏全局變量。這是不好的。 – abelenky

+3

另一個人很難讀取你的代碼。在您寫出***一行***代碼之前,請採用可接受的格式化樣式。在我看來,您呈現代碼的方式反映了您的思維方式:對解決方案採用隨意的方式來解決問題。 –

+0

......也許你的想法超出了你的打字習慣,但另一個剛性格式化風格的優點是它可以讓你有時間在準備代碼時考慮和審查這些想法。 –

回答

0

更改搜索函數聲明:

int search(int no,int *num) 

更改您訪問數組元素的方式:

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

,並調用它像:

s=search(no,num) 

我想你對數組,指針和參數傳遞有一些困惑。 此外,作爲您的問題下面的評論已經指出,你應該採取更好的編碼風格。你的代碼真的很難閱讀。

這可能是一個很好的起點: https://www.kernel.org/doc/Documentation/process/coding-style.rst

相關問題