标题:关于C函数返回值的问题
只看楼主
wlxy_wang
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:77
专家分:303
注 册:2018-11-2
结帖率:100%
已结贴  问题点数:20 回复次数:16 
关于C函数返回值的问题
问题是这样的,本来做一个“求一个数,该数加100是一个完全平方数,再加168又是一个完全平方数”编程序的时候,由于一个语句的位置写错了,出现了return语句执行不到的问题,但函数也返回了值,但这个值完全出乎意料。请了解的牛人给予解答,谢谢!!程序如下
#include<stdio.h>
int f(int x)
{
int i,j;
for(i=1;i<=x;i++)
for(j=1;j<=10;j++)
if(i*i==x+100&&(i+j)*(i+j)==x+268)
{    printf("i=%d,j=%d\n",i,j);
    return 1;
//    if(i>x)return(0);///开始写的时候出错,写到此处,由于不能执行到return语句,返回值比较奇怪
}
if(i>x)return(0);

}
void main()
{
int i;
for(i=1; ;i++)
{printf("f(i)=%d\n",f(i));//查看返回值
if( f(i) )
{
printf("num is=%d\n",i);
break;
}}

}

在主函数中,如果i从1开始,函数返回2,i从2开始,函数返回3,i从3开始,函数返回4,完全不知道这个返回值怎么返回来的,请大牛给答案。
搜索更多相关主题的帖子: 函数 返回值 return 返回 int 
2018-11-22 08:35
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:4 
“未定义行为”没有研究价值
而且编译器给出了警告,你不当回事,那能怎么办?
2018-11-22 08:48
Tomorrw_I
Rank: 10Rank: 10Rank: 10
等 级:禁止访问
威 望:6
帖 子:406
专家分:1712
注 册:2018-10-16
得分:4 
新手好好按规矩写,不好吗?

学C有用吗?
学C++有前途吗?
数据库有必要学吗?
……
别问,你还什么都不会,学就对了
……
2018-11-22 09:02
wlxy_wang
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:77
专家分:303
注 册:2018-11-2
得分:0 
虽然上面两位版主给了回复,但对于这个问题的答案并没有给出,首先这个问题我问的是在这种情况下函数返回值的内部运行机制我当然知道我写错了,并且在这个题中,我也把写错的部分纠正过来了,如果一个程序在开始写的时候有问题,并且引出了让编程者不解的问题,就不能在此提问么?给出类似的答案是什么?你懂?
2018-11-23 08:17
Tomorrw_I
Rank: 10Rank: 10Rank: 10
等 级:禁止访问
威 望:6
帖 子:406
专家分:1712
注 册:2018-10-16
得分:0 
编译器已经给出警告!改了就好了啊!
非要知道为什么,那我告诉你!

有返回值的被调函数,没有return语句,它的结果是eax中的未知值!
而你这个代码,eax中,保存的是for(i=1; ;i++),这句里面i的值!

i给多少,打印多少!不存在你首楼说的情况!

在主函数中,如果i从1开始,函数返回2,i从2开始,函数返回3,i从3开始,函数返回4,完全不知道这个返回值怎么返回来的,请大牛给答案。

这个,不存在的!i是多少,打印多少,哪来的加1输出

你给i赋值0,你试试,会看到什么

[此贴子已经被作者于2018-11-23 09:01编辑过]


学C有用吗?
学C++有前途吗?
数据库有必要学吗?
……
别问,你还什么都不会,学就对了
……
2018-11-23 08:58
豆豆的滴
Rank: 9Rank: 9Rank: 9
来 自:湖南
等 级:贵宾
威 望:33
帖 子:368
专家分:1087
注 册:2018-5-7
得分:4 
问一个问题你为啥函数里有输出但又要在主程序里用输出呢
2018-11-23 09:06
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:4 

但是看你态度不想告诉你
自己看组成原理 自己看汇编

慢慢翻
呵呵


https://zh.
2018-11-23 09:08
Tomorrw_I
Rank: 10Rank: 10Rank: 10
等 级:禁止访问
威 望:6
帖 子:406
专家分:1712
注 册:2018-10-16
得分:0 
以下是引用wlxy_wang在2018-11-23 08:17:57的发言:

虽然上面两位版主给了回复,但对于这个问题的答案并没有给出,首先这个问题我问的是在这种情况下函数返回值的内部运行机制我当然知道我写错了,并且在这个题中,我也把写错的部分纠正过来了,如果一个程序在开始写的时候有问题,并且引出了让编程者不解的问题,就不能在此提问么?给出类似的答案是什么?你懂?



你这段话,我很不认同!你可以提问,大家也都是自愿回复!没人回复,没人解答,也很正常!不是所有问题,都需要回复!
你的这个问题,完全就是自我纠结!我是感觉没必要回答!你学完内存模型、汇编、反编译,这种小问题,根本就不是问题!
你现在,把你的代码写的整洁、干练、不出语法错误!这才是你要做的!

学C有用吗?
学C++有前途吗?
数据库有必要学吗?
……
别问,你还什么都不会,学就对了
……
2018-11-23 09:12
wlxy_wang
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:77
专家分:303
注 册:2018-11-2
得分:0 
编译器给出警告我当然也看到了,但一个程序出错,得出了一个我完全无法理解的结果,我想知道为什么难道错了吗?
还有,不要犯经验主义,什么不存在的,你运行这个程序了吗?
懂就是懂,不懂不要装懂,自己看程序运行的结果!!!!


[此贴子已经被作者于2018-11-23 09:20编辑过]

2018-11-23 09:19
wlxy_wang
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:77
专家分:303
注 册:2018-11-2
得分:0 
回复 6楼 豆豆的滴
在函数里的输出想看看那个加100和加268后组成的完全平方数的因子是什么,而主函数中的输出,就是想看看函数的返回值是什么。
2018-11-23 09:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-491454-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.089890 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved