-9
int akki(int arr[],int m,int n){
     int i;
     for(i=0;i<m;i++){
      if(arr[i]==n)
           return i;

}
      return 20;
}
void main(){
int i,m,n,arr[10],a;
printf("Enter size of array:");
scanf("%d",&m);
printf("Enter %d elements of array:",m);
for(i=0;i<m;i++){
scanf("%d",arr[i]);
}
printf("Enter element to be searched:");
scanf("%d",&n);
a=akki(arr,m,n);
if(a!=20)
printf("Element found at %d position",a+1);
else
printf("Element not found");

20個くらいのガベージ値を返しています..条件が一致しても... iの値を返しています.mは配列arrのサイズ、nは検索対象の要素である線形検索関数です...で説明してください詳細..私はC言語が初めてです

よろしくお願いします

4

2 に答える 2

3

コードに問題があります。変化する

scanf("%d",arr[i]);

scanf("%d",&arr[i]);

これは、 type の引数が必要ですが、 type の引数を指定したために行われscanfます。また、ユーザーが最初に 10 より大きい数値を入力した場合にプログラムを終了するチェックを追加します。int*arr[i]intscanf

于 2015-01-16T08:37:15.447 に答える
2

2 つの理由が考えられます。

ケース 1 [_always_ の可能性が高い]

単純。あなたのif(arr[i]==n)条件が満たされていないため、i<m偽になりました。ループから外れたfor()ため、return 20.

ケース 2 [_常に_の可能性は低い]

偶然にも、 の値がn入力配列の 21 番目の位置 [インデックス 20] に存在します。

コーディングの側面とは別に、この関数の論理的な目的は理解できましたか? そうでない場合は、それから始めてください。指定された長さの配列で特定の値を検索し、配列の要素がその値に一致しない場合は、20 を返します。

入力に基づいてケースを分析します。


編集:

完全なコードを見た後、CoolGuy氏指摘したように、

scanf("%d",&arr[i]);

参考までに、第 7.19.6.2 章の段落 12 の%d書式指定子を参照してください。

... 対応する引数は、符号付き整数へのポインタでなければなりません。

あなたのコードでarr[i]は、タイプはintです。必要なのはint *、つまり です&arr[i]

于 2015-01-16T07:58:27.240 に答える