| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2018 人关注过本帖
标题:(2)C语言问题之同一串代码在VC和codeblocks编译运行产生了不同的结果
只看楼主 加入收藏
武伟
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:506
专家分:2638
注 册:2015-7-23
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:34 
(2)C语言问题之同一串代码在VC和codeblocks编译运行产生了不同的结果
这是关于水仙花数的问题
程序代码:
#include<stdio.h>
#include<math.h>
int main()
{
    int n,a,b,c;
    for(n=100;n<=999;n++)
    {
        a=n%10;
        b=n/100;
        c=(n-a-b*100)/10;
        if(n==pow(a,3)+pow(b,3)+pow(c,3))
            printf("%d\n",n);
    }
    return 0;
}

在codeblocks上运行结果如下,当然明显是错误的:
但是在VC上运行结果完全正确:
图片附件: 游客没有浏览图片的权限,请 登录注册

同一串代码为何编译结果如此不同,求指导,谢谢诸位了

[此贴子已经被作者于2020-3-23 13:38编辑过]

搜索更多相关主题的帖子: 编译 代码 不同 结果 运行 
2015-10-16 20:34
武伟
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:506
专家分:2638
注 册:2015-7-23
收藏
得分:0 
查询到pow参数不是double型会导致数据出错。于是改成了这样
程序代码:
#include<stdio.h>
//#include<math.h>
int main()
{
    int n,a,b,c;
    for(n=100;n<=999;n++)
    {
        a=n%10;
        b=n/100;
        c=(n-a-b*100)/10;
        if(n==a*a*a+b*b*b+c*c*c)
            printf("%d\n",n);
    }
    return 0;
}

在codeblocks上运行时结果终于正确了

[此贴子已经被作者于2020-3-23 13:39编辑过]

2015-10-16 20:39
武伟
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:506
专家分:2638
注 册:2015-7-23
收藏
得分:0 
现在问题可以说有两个:
1.为什么第一段代码在两个平台上编译时结果不一样?
2.即使pow参数不是double型会导致数据出错,可定义double类型数据时,不是还可以输入整数么……我已经完全混乱了,论坛的各位前辈帮帮我这个初出茅庐的小子吧。
2015-10-16 20:44
蓝色风暴cl
Rank: 8Rank: 8
来 自:新疆
等 级:蝙蝠侠
威 望:3
帖 子:163
专家分:704
注 册:2015-9-6
收藏
得分:0 
没有用过codeblocks。。不懂。

欢迎大家加好友哦,多找我聊聊吧!
2015-10-16 22:26
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:1 
Code::Blocks默认的编译器是GCC 但我用GCC试了下是得到的结果是下面的

153
370
371
407

好像是正确的

这个问题 不明确编译器的版本 讨论起来没意义
2015-10-17 09:41
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
還是那句老話:學會調試比什麼都重要。

授人以渔,不授人以鱼。
2015-10-17 11:09
武伟
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:506
专家分:2638
注 册:2015-7-23
收藏
得分:0 
以下是引用TonyDeng在2015-10-17 11:09:19的发言:

還是那句老話:學會調試比什麼都重要。

受教了,看来还是得先学学调试,不能太急功近利
2015-10-17 20:00
武伟
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:506
专家分:2638
注 册:2015-7-23
收藏
得分:0 
以下是引用zklhp在2015-10-17 09:41:01的发言:

Code::Blocks默认的编译器是GCC 但我用GCC试了下是得到的结果是下面的

153
370
371
407

好像是正确的

这个问题 不明确编译器的版本 讨论起来没意义

抱歉,我也不知道编译器的版本是啥
2015-10-17 20:01
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 7楼 武伟
那你為什麼不問“怎麼調試”卻彈出下面一帖?在你心目中到底知不知道“調試”是什麼意思?

授人以渔,不授人以鱼。
2015-10-18 13:38
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我指你一條路。

1樓的程序:
程序代码:
#include<stdio.h>
#include<math.h>
int main()

 {
     int n,a,b,c;
     for(n=100;n<=999;n++)
     {
         a=n%10;
         b=n/100;
         c=(n-a-b*100)/10;
         if(n==pow(a,3)+pow(b,3)+pow(c,3))
             printf("%d\n",n);
     }
     return 0;


你的輸出結果衹有一個407,那麼回頭觀察代碼,這個輸出必定是用if()語句中的printf()而來,那麼表明能夠進入if()中條件祗滿足了一次,這樣,審查的重點就是那個==到底是如何成立或不成立的。再看if()的判斷,祗要把左邊和右邊的每個項値都列出來,就知道怎麼回事,這個你會嗎?會不會看n、pow(a,3)、pow(b,3)之類的値?有調試跟蹤器可以用調試跟蹤器,沒有也可以自己用printf()看,這樣的基本調試功夫,是每個程序員的必備技能。整天去做這題那題,完全不學這些,入這行也是廢物。

授人以渔,不授人以鱼。
2015-10-18 13:58
快速回复:(2)C语言问题之同一串代码在VC和codeblocks编译运行产生了不同的结果 ...
数据加载中...
 
   



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

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