【问题标题】:return statement in c ??? why this function always returning 20?c中的return语句???为什么这个函数总是返回 20?
【发布时间】:2015-03-14 19:00:59
【问题描述】:
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语言新手

提前谢谢你

【问题讨论】:

  • 你的函数是 return 20; ,当它从未找到元素时会发生这种情况
  • 即使条件匹配(arr[i]==n)..它返回 20
  • @Akshay ,不。除非i 是20,否则不会。
  • @Akshay 当我是 20 岁 时条件会为真
  • akki 似乎还可以。问题一定出在调用代码中。请给我们看一个完整的例子。

标签: c return linear-search


【解决方案1】:

可能有两个原因。

案例 1 [很可能 _always_]

简单。因为您的if(arr[i]==n) 条件不满足,并且i&lt;m 变为假。它来自for() 循环,因此,return 20

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

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

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

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


编辑:

看到完整代码后,Mr. CoolGuypointed out,使用

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

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

...对应的参数应该是一个指向有符号整数的指针。

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

【讨论】:

  • 即使条件匹配(arr[i]==n)..它返回 20
  • @Akshay 很好,那么对于索引 20arr[i] 等于 n。这是您可以返回 20 的另一个条件。
  • 你检查n不是20吗?
  • 是的..我已经检查过..我在数组中只取了 2 个元素..仍然返回 20 或一些垃圾
  • 嗯,你错过了一个条件。你说这是因为if(arr[i]==n)从未遇到过,但可以遇到。
【解决方案2】:

您的代码有问题。改变

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

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

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

【讨论】:

  • 非常感谢......现在我的代码工作正常......但我在将字符串作为输入时有一个疑问......我们在 scanf 中不使用 &......为什么????
  • 如果您为char[] 提供索引,则需要&amp;char buffer[80]; scanf("%s", buffer); /* is the same as */ scanf("%s", &amp;buffer[0]);
  • @Akshay,请记住,数组的名称“衰减”为指向其第一个元素的指针。所以,正如 KlasLindback 所说,buffer 等于 &amp;buffer[0]
  • 知道了先生..谢谢您的宝贵答案..你能通过facebook与我联系吗..请我需要你的帮助..我在c和java中有很多问题..我的 id 是 akshay.akky786@gmail.com .. 请再次通过 facebook 与我联系..thankzz
  • @Akshay,不。我有时只登录FB。如果您遇到问题,只需将其发布在 StackOverflow 中。一定要发布确切的代码(如果不是太长,也可以是完整的代码)以及问题和/或错误消息。请务必发布问题,并且标题应提示您所面临的问题。
猜你喜欢
  • 2022-12-09
  • 2016-02-15
  • 1970-01-01
  • 2016-06-12
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 2021-08-15
相关资源
最近更新 更多