2014-04-01 128 views
0

考慮以下幾點:如何打印字符串,而不是浮動用C

#include <stdio.h> 

int main() 
{ 
    int first=9; 
    int second=0; 
    double ratio; 

    if(second==0) 
     ratio="n/a"; 
    else 
     ratio=(double)singularCount/pluralCount; 

    printf("ratio is: %f", ratio); 

    return 0; 
} 

這顯然不會運行,因爲它應該。

如何在沒有問題的情況下修改我的代碼/打印語句以打印浮點數,並且如果除以0,則不適用n/a?

我將打印許多在一個列表中這些比值,所以我想看到「N/A」時,有除以0

所需的輸出:

ratio is: n/a 

回答

0
if (second == 0) { 
printf("ratio is: n/a"); 
} else { 
printf("ratio is: %f", (double)singularCount/pluralCount); 
} 
+0

這是我想到的一種方式,但我試圖避免有2個打印語句。雖然生病使用這種解決方案,還有其他方法嗎? – user3487243

+0

@ user3487243你真的不想擔心把你的浮點輸出轉換爲字符串(見http://stackoverflow.com/questions/7228438/convert-double-float-to-string),這是一個更好的解。 – Nit

1

你正在做錯事...

你不應該把一個字符串放入一個雙變量。
你想要做的就是在未定義的雙打上使用isnan(這是完全合法的), 並且有一個if語句就可以了。

類似:

if (isinf(ration)) printf("ration is undefined\n"); 
else printf... 

這樣你就可以發送雙和方法/過程/函數得到它(我強烈建議你使用代碼分離),但你就可以得到不同的行爲。

的方式 - 看看這個代碼:

#include <stdio.h> 
#include <math.h> 
void main() 
{ 
    double d = 1.0/0.0; 
    if (isnan(d)) printf("it is n/a\n"); 
    else if (isinf(d)) printf("it is inf\n"); 
    else printf("%f\n",d); 
} 

另一件事 - 在INF或NaN的情況下,將只打印字符串「INF」和「南」,如果它足夠好爲%F你 - 你不需要改變一件事,如果它是你的眼睛。

+0

您仍然可以通過允許打印「NaN」來使其成爲單個「printf」。 – legends2k

+0

legends2k - 我以爲我在最後寫了它,但如果不是的話 - 強調它是非常重要的。除以0.0不會中止程序,並且創建未定義的變量 - 也不會影響應用程序。這也意味着我們在使用double和float時應該小心,因爲它... – evenro

+1

但是,應該注意的是,零除以整數除法是未定義的(大多會導致崩潰),並且沒有特殊值來表示諸如Inf,Nan等的狀態 – legends2k

相關問題