return c 中的语句 ???为什么这个函数总是 returning 20?

return statement in c ??? why this function always returning 20?

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.It 的值是线性搜索函数,其中 m 是数组 arr 的大小,n 是要搜索的元素... 请详细解释..我是c语言的新手

提前谢谢zzz

可能有两个原因。

案例 1[很可能_always_]

简单。因为你的if(arr[i]==n)条件不满足,i<m就变成了false。它来自 for() 循环,因此 return 20.

案例 2[不太可能_总是_]

偶然地,n 的值出现在输入数组中的第 21 个位置 [索引 20]。

除了编码方面,您是否了解此功能的逻辑目的是什么?如果没有,就从那开始。它在给定长度的数组中搜索特定值,如果数组中没有元素与该值匹配,则 returns 20.

现在根据您的意见分析您的案例。


编辑:

看到完整代码后,如Mr. CoolGuy has ,使用

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

仅供参考,您可以查看第 7.19.6.2 章第 12 段,%d 格式说明符,如

... The corresponding argument shall be a pointer to signed integer.

在您的代码中,arr[i] 的类型为 int。您需要的是 int *,即 &arr[i].

您的代码有问题。变化

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

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

这样做是因为 scanf 需要一个类型为 int* 的参数,但您提供了类型为 int 的参数 arr[i]。如果用户在第一个 scanf.

输入大于 10 的数字,还添加一个结束程序的检查