-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语言的新手

提前谢谢zzz

4

2 回答 2

3

你的代码有问题。改变

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

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

这样做是因为scanf需要一个 type 的参数,int*但您提供的参数arr[i]是 type int。如果用户输入的第一个数字大于 10,还添加一个结束程序的检查scanf

于 2015-01-16T08:37:15.447 回答
2

可能有两个原因。

案例 1 [很有可能_总是_]

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

案例 2 [_always_ 的可能性较小]

偶然地, 的值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 回答