C程序中的浮点输出不正确

C程序中的浮点输出不正确,c,C,这是我的密码 #include <stdio.h> int main() { float percentage; int sp; int bp; percentage = (sp-bp)/bp*100; scanf("%d %d", &sp, &bp ); printf("%.2f%%", percentage); return 0; } 样本输出: 76.47% 但我的输出是: -100.00% 有人能帮我解决

这是我的密码

#include <stdio.h>

int main() {
   float percentage;
   int sp;
   int bp;

   percentage = (sp-bp)/bp*100;

   scanf("%d %d", &sp, &bp );
   printf("%.2f%%", percentage);

   return 0;
}
样本输出:

76.47%
但我的输出是:

-100.00%

有人能帮我解决这个问题吗?

解释很快就会补充

代码

#include <stdio.h>

int main()
{

   float percentage=0;
   int sp=0;
   int bp=0;

   scanf("%d%d", &sp, &bp );
   //printf("\n%d%d", bp,sp);

   percentage = (sp-bp)/(float)bp*100;


   printf("%.2f%%", percentage);


}
因为当我们在函数中声明一个变量时,它不是initiate,而是垃圾值。这可能会导致未定义的行为。请参阅

假设
scanf()
无法正常工作,且整数
sp
bp
值保留默认值。如果我们不启动它们,垃圾值仍然存在

一次声明和定义并初始化为零。

(float)
显式转换添加到除法

(sp-bp)/(float)bp*100;
在C语言中,一个整型数除以另一个整型数转换成整型数,小数部分丢失,因为它被截断了。

首先,在使用这些值之前,您应该真正阅读它们:

scanf("%d %d", &sp, &bp);
percentage = ...
第二,这:

percentage = (sp-bp)/bp*100;
执行整数除法,因此除法的其余部分将被完全丢弃,您将得到以下结果:

(150 - 85) / 85 == 0
0 * 100 == 0. 
在执行操作之前,应将除法的一端强制转换为浮动:

percentage = (sp-bp)/(float)bp * 100;

正确代码:

#include <stdio.h>

int main() {
   float percentage;
   int sp;
   int bp;

   scanf("%d %d", &sp, &bp);

   percentage = (sp-bp)/(float)bp * 100;

   printf("%.2f%%", percentage);

   return 0;
}
#包括
int main(){
浮动百分比;
int sp;
int-bp;
scanf(“%d%d”,&sp,&bp);
百分比=(标普bp)/(浮动)bp*100;
printf(“%.2f%%”,百分比);
返回0;
}

欢迎来到SO!为什么
百分比=(sp bp)/bp*100scanf
调用上方的code>?程序自上而下运行,所以这是用一堆未初始化的变量进行算术运算。@ggorlen这就是问题之一。还有一个问题是对整数类型执行算术,并期望得到浮点类型的结果
percentage = (sp-bp)/(float)bp * 100;
#include <stdio.h>

int main() {
   float percentage;
   int sp;
   int bp;

   scanf("%d %d", &sp, &bp);

   percentage = (sp-bp)/(float)bp * 100;

   printf("%.2f%%", percentage);

   return 0;
}