2014-02-16 84 views
1

我的代碼:爲什麼我看到這個大數字而不是零?

#define A2N(a) (a>47 && a<58)?(a-48):(-1e10) 
... 
char *c ; 
printf("Interval = %s,%d,%d \n",c,c[1],A2N(c[1])); 

輸出:

Interval = P00000T00:00:00     ,48,1127219200 

爲什麼?

當我使用%f打印A2N(c [1])時,每件事情都可以。

+1

什麼是'c [1]'? – Maroun

+1

什麼是c [1],你應該問這些事情。我們不能簡單地猜測並給出一些隨機原因。 – Shravan40

+2

我們需要完整但最少的代碼。目前的一個不符合任何標準。 –

回答

4

您需要的浮動符%f,因爲在A2N三元表達式的結果類型爲double

的「其他」部分使用-1e10,一個double

+1

沒有'f'後綴,我相信'-1e10'是一個'double',因此需要格式說明符'%lf'。 – timrau

+0

但在這種情況下,其他部分不會執行! –

+1

@ AliSepehri.Kh:沒關係。一個表達式只能有一個類型。編譯器會選擇「更寬」的類型。 –

0

對於uppercase characters>=97對於lowercase,字符的值是>=65
所以,每一個其他部分將被評估,其返回double,所以使用%lf

參見wikipedia - ASCII

相關問題