2012-12-28 26 views
1

我应该输入实数直到遇到输入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; 
} 

但是当我尝试在双数据类型相同的代码,程序终止不会对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

您是否在'scanf'之后尝试过'printf(“%f”,a [i])'来查看您的程序对您的输入做了什么? – 2012-12-28 15:03:17

回答

1

首先,你的解析字符串是不正确的:对于double,它应该是“%lf”,而不是“%f”,这是浮点数。其次,通常比较浮点类型的相等性是容易出错的,因为它们本质上是近似的,尽管在这种情况下,0是可以精确表示的值。

+0

谢谢。问题是,我认为我的转换说明符错了,但没有真正意识到问题出在哪里。再次感谢。 –