gcc似乎编译我的代码错了?

时间:2014-12-21 13:33:12

标签: c gcc

我在C中相当新,我试图在我的教科书中解决一些练习并遇到一个奇怪的问题。虽然我的任务无疑很容易,但程序根本无法正常工作。在一些试验之后,似乎错误出现在编译器上,但这听起来不合理,这是我能提出的唯一理由

这里没有任何进一步的延迟是代码

#include <stdio.h>

double power(double n, int p);

int main(void)
{
double x, xpow;
int exp;

printf("Enter a number and the positive integer power");
printf(" to which\nthe number will be raised. Enter q");
printf(" to quit.\n");
while (scanf("%lf%d", &x, &exp) == 2)
{
    xpow = power(x,exp);
    printf("%.3g to the power %d is %.5g\n", x, exp, xpow);
    printf("Enter next pair of numbers or q to quit.\n");
}
printf("Hope you enjoyed this power trip -- bye!\n");

return 0;
}

double power(double n, int p)
{
double pow = 1;
int i ;

if ( n == 0 && p == 0)
{
    printf("0 to zeroth power is undefined\nwe will use therefor 1 instead\n");
    p = 1 ;
}

if (p >= 0)
{
    for (i = 1 ; i <= p ; i++);
        pow *= n ;
}
else
{
    for (i = -1 ; i >= p ; i--);
        pow *= 1/n ;
}

return pow;
}

程序意图很清楚问题是当我输入一些测试用例时输出错误 喜欢 (5 2) 输出应该是25但我得到5 (5 6) 输出应该是15625但我得到5

在用gdb检查这个问题后,我发现不是将i初始化为1而是将其初始化为3,没有明显的原因,并且第二个输入i被初始化为7 我想知道为什么

我正在使用gcc。

1 个答案:

答案 0 :(得分:2)

为什么要责怪编译器,我会先责怪我的眼睛,你的for循环中有一个额外的分号

for (i = 1 ; i <= p ; i++);

将其更改为

for (i = 1 ; i <= p ; i++)