我在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。
答案 0 :(得分:2)
为什么要责怪编译器,我会先责怪我的眼睛,你的for循环中有一个额外的分号
for (i = 1 ; i <= p ; i++);
将其更改为
for (i = 1 ; i <= p ; i++)