我应该输入实数,直到遇到输入为0,然后程序应该终止。我得到这个代码适用于整数数据类型:
#include<stdio.h>
int main()
{
int i;
int a[60];
for(i=0;i<60;i++)
a[i]=-1;
for(i=0;;i++)
{
scanf("%d",&a[i]);
if(a[i]==0)
break;
}
return 0;
}
但是当我在double数据类型上尝试相同的代码时,输入0时不会发生程序终止。这是代码:
#include<stdio.h>
int main()
{
int i;
double a[60];
for(i=0;i<60;i++)
a[i]=-1.0;
for(i=0;;i++)
{
scanf("%f",&a[i]);
if(a[i]==0.0)
break;
}
return 0;
}
有人会费心解释为什么会这样吗?我想不出任何理由。提前谢谢。
答案 0 :(得分:1)
首先,你的解析字符串是不正确的:对于double,它应该是“%lf”,而不是“%f”,这是浮点数。
其次,通常比较浮点类型的相等性是容易出错的,因为它们本质上是近似的,尽管在这种情况下,0是一个可以精确表示的值。