为什么我的C程序在这里打印0.000000?

时间:2012-01-24 21:03:42

标签: c floating-point

我刚开始学习C编程。 在我的书中有这段代码:

/*Code Start*/
/*This code is use to find the simple interest*/

main ()
{
int p, n;
float r, si;

p = 1000;
n = 3;
r = 8.5;

si= p*n*r/100;
printf("%f", si);

}

/*Code end*/

我得到的输出是“255.000000”

我虽然我会用scanf函数修改它,所以我写了这个:

/*Code Start*/

main ()
{
int p, n;
float r, si;

printf("Enter value for p: \n");
scanf("%d", &p);
printf("Enter value for n: \n\n");
scanf("%d", &n);
printf("Enter valuse for r: \n\n");
scanf("%d", &r);

si= p*n*r/100;

printf("\nYour Simple Interest is %f\n\n", si);
}

/*Code End*/

无论我给p,n,r给出什么值,我得到的答案总是0.000000 ..
我也试过给出值,p = 1000,n = 3,r = 8.5但仍然得到0.000000 ..

6 个答案:

答案 0 :(得分:6)

更改scanf中的说明符。您使用%d代替%f

scanf("%f", &r);
        ^
  • 第一面注意:代码看起来很糟糕(main没有返回类型?!)。你确定它是一本好书吗?
  • 第二面注意事项:今天使用float是毫无意义的。可能是你 应该使用double s?

答案 1 :(得分:4)

使用%f转化规范阅读float

scanf("%f", &r);

%d表示它读取十进制整数而不是float

答案 2 :(得分:4)

rfloat,但您正在使用%d作为scanf说明符进行阅读,该说明符需要int

答案 3 :(得分:4)

首先,您的主要问题是:%d说明符仅适用于整数,不是 floatdouble。将%f用于float s。

此外,main应该返回int,这样做:

int main() {
    /* your code */
    return 0;
}

最后,我建议您更好地利用空白区域,因为一旦您开始制作更大的程序,它将极大地提高可读性。

答案 4 :(得分:0)

代码中真正的罪魁祸首是scanf("**%d**", &r)行。 %d是整数值的格式说明符,因为您将r声明为float,然后使用%f而不是%d

即。 scanf("%f", &r)

答案 5 :(得分:0)

改变任何一个 int p,n; 漂浮r,si; int p,n,r; 浮动;

或更改 scanf中的格式说明符("%d",& r); %d %f

当你将r声明为整数 r = 8 时,将考虑scanf("%d",& r);将被接受。并且你的程序被编译和执行。

声明和格式说明符应该相同。

我的建议是在处理钱时使用%。2f 。这将是10.00这是正确的格式。