我想避免';浮点错误';在C程序中
我希望在这段代码中避免“浮点错误” 此代码的目的是获得“整数的平均值”,但“整数”的数量受用户输入的限制。请帮帮我我想避免';浮点错误';在C程序中,c,C,我希望在这段代码中避免“浮点错误” 此代码的目的是获得“整数的平均值”,但“整数”的数量受用户输入的限制。请帮帮我 #include <stdio.h> int main(void) { int num=0; int limit; int result=0; printf("number of integer: "); scanf("&d", &limit); while(num<limit) {
#include <stdio.h>
int main(void)
{
int num=0;
int limit;
int result=0;
printf("number of integer: ");
scanf("&d", &limit);
while(num<limit)
{
int output;
printf("Input integer : ");
scanf("%d", &output);
result += output;
num++;
}
printf("average of total integer: %d \n", result/limit);
return 0;
}
#包括
内部主(空)
{
int num=0;
整数极限;
int结果=0;
printf(“整数的数目:”);
scanf(“&d”、&limit);
当(num除以2个整数时,结果也是一个整数
要返回浮点,需要将其中一个参数强制转换为浮点
所以你的最后一行变成了
printf("average of total integer: %f \n", result/(float)limit);
由于两个整数的结果也是一个整数,因此
printf("average of total integer: %f \n", result/(float)limit);
当你输入cast变量limit
到float时,发生的事情是result
将被隐式转换为float
,因此结果是float没有家庭作业,但我独自一人看书学习。这已经很好了。你不做任何浮点计算,所以不会有浮点错误。您得到的是什么“浮点错误”?或者您只是在猜测您可以得到一个?读取limit
的scanf
应该具有%d
格式,而不是“&d”
您希望从scanf(&d“,&limit)中得到什么
?哦,将一个int除以一个int,得到一个int。不是浮点。将结果
和限制
声明为浮点
或双倍
另一个答案比你的答案早9分钟,你的答案没有添加任何实质性的消息。@glglglglglgl我的互联网坏了。谢谢你的回答!=)奇怪的是,为什么您要转换为float
而不是double
?注意:商result/(float)limit
在传递到printf()之前会转换为double
@chux你确定吗?结果的类型是较长参数的类型。因此,在本例中,它将是float。@Bartlomiej Lewandowski同意你的“it”,即商是float
。但是“it”被传递到printf(char*格式,…)
作为一个参数,它会经历默认参数提升,在本例中是:float
被提升为double
.C11§6.5.2.2 6这就是为什么如果将float
或double
传递给printf()
它使用与float
相同的格式说明符,它们被提升为double
@chux谢谢,我在传递到printf时没有注意到这种提升。