c中的return语句???为啥这个函数总是返回 20?

Posted

技术标签:

【中文标题】c中的return语句???为啥这个函数总是返回 20?【英文标题】: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 似乎还可以。问题一定出在调用代码中。请给我们看一个完整的例子。 【参考方案1】:

可能有两个原因。

案例 1 [很可能 _always_]

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

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

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

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

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


编辑:

看到完整代码后,Mr. CoolGuy有pointed 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。如果您遇到问题,只需将其发布在 *** 中。一定要发布确切的代码(如果不是太长,也可以是完整的代码)以及问题和/或错误消息。请务必发布问题,并且标题应提示您所面临的问题。

以上是关于c中的return语句???为啥这个函数总是返回 20?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter中没有return语句的函数是不是总是返回null?

oracle函数中可以有return为啥还要out参数

C语言中return语句怎样返回两个或多个值

C语言中,return语句怎么样返回一个数组?

在c语言中,return的作用和用法

Python中return语句的参数都有哪些呢?