2014-04-01 43 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

相关问题