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 的数字,还添加一个结束程序的检查
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
.