当前位置: 代码迷 >> C语言 >> 改变做法后,错误相同,
  详细解决方案

改变做法后,错误相同,

热度:356   发布时间:2008-05-27 21:26:17.0
测试失败

[[it] 本帖最后由 VxWorks 于 2008-5-27 21:27 编辑 [/it]]
----------------解决方案--------------------------------------------------------
楼上几位大牛有回答对的吗?没有.都在胡说什么编译器的问题,TC有这么多BUG让你们发现么?你们当用了几十年TC前辈都是BC么?

如果诚心帮助人,就请诚心一点,而不要时刻戴着有色眼镜看问题.说实话,你们目前还没评论编译器的优劣资格.

#include<math.h>
long int b[10],a[10];
void f1(int x,int n)
{
    a[n]=pow(x,n);
}

long int f2(int n)
{
    if(n==0)return 1 ;
    else return n*f2(n-1);
}
int main()
{
    int x,n ;
    float sum=0 ;
    printf("Enter the number:");
    scanf("%d",&x); //语法错误
   
    for(n=0;n<=9;n++)
    {
        f1(x,n);
        b[n]=f2(n);  //逻辑性错误
        sum+=(float)a[n]/b[n];
    }
    printf("%f",sum);
    return 0;
}

楼主看看我修改后的是不是合你的题意,并且注意一下我的程序与你的不同之处
----------------解决方案--------------------------------------------------------
1,函数f1() f(2)都要加上void 或者return 0;
2,加#include "stdio.h"
经编译后正常

ps:顶StarWing83,说得好啊~~学习中...
----------------解决方案--------------------------------------------------------
很好,看来以后可以跟老K吵架,比较舒服。

首先你承认了TC有bug了,的确我没发现,因为我根本就没有用。对于我没有使用的东西,我自然没有发言权。但是请注意,这里是C语言论坛,不是TC论坛。我们说的是ANSI C,不是TC,所以,我用什么编译器是我的自由,当然这也决定了你用什么编译器也是你的自由。float pointing error的问题我百度过,的确没有发现什么有价值的地方。bccn里面有个老帖你们可以搜索一下。但是,难道说的不对就不能发言了吗?难道非要完全正确的回答正确才能发表评论吗?说到BC,至少我不愿意当。
要我说,原因应该是,TC的浮点处理和现代处理器不同。早期的处理器是使用单独的协处理器去处理浮点数的,在处理的时候是和CPU并行处理的,所以才会有一些特殊的指令来调剂。不过现代处理器都是可以直接处理浮点数了。不再需要协处理器。所以,LZ的代码我用GCC编译根本没有出现问题。
老K前辈愿意自虐是你自己的事情,LZ愿意自虐也是楼主的事情,我们愿意多管闲事是我们自己的事情。就是这样。
----------------解决方案--------------------------------------------------------
今天没什么兴趣吵架,不过还是回答一下你.

1.我从没有强求你或者这个论坛的任何一个人用什么编译器,也没有否定过任何一款编译器的价值.因为我知道任何一款编译器都有其存在的价值,只是适用人群\项目不同而已.
2.关于楼主的"Floating  point  error:DOMAIN"这个问题请你仔细再看看,然后你就知道我为什么在12楼这么说了.
3.你浮躁了
----------------解决方案--------------------------------------------------------
嘿嘿,的确浮躁了……因为可以吵架所以比较激动嘛……
我看看再说吧……
其实我没有仔细看LZ的程序,他的程序和那个老帖子的问题太像了,我就直接按照那个方法改的,然后你提醒才发现其实并不一样。
不管怎么说,我怀疑都是返回值的问题。
不过吵架的感觉真爽啊……特别是当一股气直灌大脑的时候,爽啊~~~哈哈哈~~~
----------------解决方案--------------------------------------------------------
为什么那个是语法错误?我并不认为是语法错误,不过,你喜欢用的TC喜欢把这个作为语法错误的话,
那就是那个编译器的自由,正如VS会警告scanf和gets一样

[color=white]
----------------解决方案--------------------------------------------------------
[bo][un]Loli[/un] 在 2008-5-27 16:50 的发言:[/bo]

很简单,不要去用TC



你这样的回答不是误导楼主,程序代码是对,只是编译用错了么?
我还是以前那句话,对这种技术问题求助的贴子,要么你就不要回答,要回答就要诚心,不要误导别人.
你仔细看过楼主程序了么?没有,你只瞄了一眼.
----------------解决方案--------------------------------------------------------
全篇仔细看了一遍。
1 LZ 的问题在于两点,1是f1的返回值问题,由于pow返回float,f1默认返回int,而返回的值是ax的值从而出错,2是scanf的问题了。不过出现这个问题大多数都是因为编译环境(而不仅仅是编译器)对于浮点数的实现,所以才引出我上面的发言。
2 对于编译器,我还是保持我的观点吧,反正你们用什么我不管,以后看见TC引起的问题我不看就可以了。但是,C语言刚开始的时候,因为其贴近机器而获得了极大的灵活性,但是在现在,C贴近机器的优势已经不明显,大多数都需要编译器智能检测并使用新的指令(这话是谁说的?是flyue还是rockcarry啊……),所以,一个好的编译环境对效率,对可移植性,对标准都很重要,这也是有些人推荐新编译器而抵制TC的原因所在。
3 我在上面除了回答了一个问题(f1和f2都改成void。虽然我没看出来scanf――我当时没仔细看程序),以外,好像没有多说什么吧?
4 看来吵架也需要冷静……Orz……
----------------解决方案--------------------------------------------------------
再补充一点……原来燕子是这个意思啊……我又误解了……
不过说的也对,这个程序所有的错误如果用GCC编译的话,全部都会用警告的方式标示出来,包括那个scanf……
----------------解决方案--------------------------------------------------------
  相关解决方案