2012-12-28 54 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

謝謝。問題是,我認爲我的轉換說明符錯了,但沒有真正意識到問題出在哪裏。再次感謝。 –