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<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 *
,即&arr[i]
。
【讨论】:
即使条件匹配(arr[i]==n)..它返回 20 @Akshay 很好,那么对于索引20
,arr[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[]
提供索引,则需要&
。 char buffer[80]; scanf("%s", buffer); /* is the same as */ scanf("%s", &buffer[0]);
@Akshay,请记住,数组的名称“衰减”为指向其第一个元素的指针。所以,正如 KlasLindback 所说,buffer
等于 &buffer[0]
知道了先生..谢谢您的宝贵答案..你能通过facebook与我联系吗..请我需要你的帮助..我在c和java中有很多问题..我的 id 是 akshay.akky786@gmail.com .. 请再次通过 facebook 与我联系..thankzz
@Akshay,不。我有时只登录FB。如果您遇到问题,只需将其发布在 *** 中。一定要发布确切的代码(如果不是太长,也可以是完整的代码)以及问题和/或错误消息。请务必发布问题,并且标题应提示您所面临的问题。以上是关于c中的return语句???为啥这个函数总是返回 20?的主要内容,如果未能解决你的问题,请参考以下文章