2016-09-02 4 views
2

私は、ユーザーが塗りつぶした配列を含むプログラムを作成しようとしています。しかし、それはarray.Myコードの最初の要素に対してのみ機能することは以下の通りです:C手動で塗りつぶした値の値を検索する

`void searchh(int arr[],int search,int number,int counter); 

int main() 
{  
int number,search,i; 
int counter=0; 


printf("How many numbers will you enter?"); 
scanf("%d",&number); 

int array[number]; 

for(i=0;i<number;i++){ 
    printf("Please enter the %d. element of the array:",i+1); 
    scanf("%d",&array[i]); 
} 


printf("Please enter the number that you're looking for:"); 
scanf("%d",&search); 

searchh(array,search,number,counter); 


return 0; 
} 

void searchh(int arr[],int search,int number,int counter){ 
int i,c; 
int key=search; 
int num=number; 
counter=0; 

int arrsize=(int)(sizeof(arr)/sizeof(int)); 
int arrayent[(int)(sizeof(num)/sizeof(int))]; 


for(i=0;i<arrsize;i++) 
{ 

if(arr[i]==key) 
{ 
    arrayent[counter]=i; 
    counter++; 
} 
} 

printf("The number that you're looking for which is %d is found %d times.\nLocations:",key,counter); 

if(counter>0){ 
for(c=0;c<sizeof(arrayent)/sizeof(int);c++){ 
    printf("%d\n",arrayent[c]); 
} 
} 

else 
    printf("Number doesn't exist!!"); 


}` 

して出力:あなたの助けのための

Output That Works Output That Doesn't Work

感謝。

答えて

2
int arrsize=(int)(sizeof(arr)/sizeof(int)); 

これは既にあなたが思う通りです。 sizeof(arr) - ポインタのサイズが4バイトの場合は4になります。言い換えれば、関数内の配列サイズをチェックすることはできません。arrは配列の最初の要素のポインタに減衰します。したがって、sizeof(arr)はポインタのサイズを4または8に戻します。配列の要素数をパラメータとして関数に渡す必要があります。これはケースではnumberです。

この

int arrayent[(int)(sizeof(num)/sizeof(int))]; 

も奇妙です。 numintである。 sizeof(num)sizeof(int)は同じになります - と部門はあなただけの

int arrsize = number; 
int arrayent[number]; 

PSとして行くべき1


IMOの2行

int arrsize=(int)(sizeof(arr)/sizeof(int)); 
int arrayent[(int)(sizeof(num)/sizeof(int))]; 

を与えるだろう。デバッガを使用して、何らかの問題を解決してください。

+0

私はあなたが言ったように、それは働いた!私はちょうどサイズの変数のint値なしと考えて、arrayofの長さを得るためにsizeofメソッドを使用しようとした。次回は、あなたの助けを感謝する:) –

関連する問題