问题描述
- scanf函数用%f读取double类型时,为什么会出现错误?
-
问题一:
#includedouble 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 will be raised . enter q");
printf("to quit.n");
while (scanf("%1f%d",&x,&exp)==2)
{
xpow=power(x,exp);
printf("%.3g to the power %d is %.5gn",x,exp,xpow);
printf("enter next pair of numbers or q to quit. n");} printf("HOPE you enjoy this power trip --bye!n"); return 0;
}
double power (double n,int p)
{double pow=1; int i; for (i=1;i<=p;i++) pow*=n; return pow;
}
1)这个程序是《c primer plus》书上的一个例子,但是并不能计算出浮点数的整数次方,想了一天也没有看出是哪里的问题,若把double 换成float ,可以计算整数的整数次幂,还是计算不了浮点数的整数次方,这是为什么啊?
2)声明一下,用的是visual studio 编译器。
问题二:
#include
int main(void)
{
double num;
printf("please enter the number:n");
scanf("%f",&num);
printf("your enter number is %f",num);
return 0;
}
这个程序输入num=1.2时,为什么不能打印出1.2,而是与之完全不想关的很大的数?
解决方案
第一个程序,应该是你的输入有问题,调试下。%lf(不是1f,是lf,才是double)
解决方案二:
%f 单精度
double 双精度
解决方案三:
第二个程序,num没有加上取地址。&num