这是一个简单的测试程序,在我完成输入以进入程序第二printf
的子流派之后,我试图在控制台上显示结果“ 12 Angry man”。我在这里做错了什么?请不要尝试在此处找到任何相关性。控制台将简单地要求用户按1进行操作,然后询问幽默/其他,幽默在输入1.1后会显示12个愤怒的人。
int main()
{
int action=1,comedy=2;
float humorous=1.1, other=1.2,input1;
int input;
printf("Which Movies You Want to See\n");
printf("Action/Comedy");
scanf("%d",&input);
if(input==1)
{
printf("Humorous/Other");
scanf("%f",&input1);
if(input1==1.1)
{
printf("12 angry men");
}
}
return 0 ;
}
答案 0 :(得分:0)
就像其他人提到的那样,直接比较浮动对象并不是您的最佳做法。例如,如果您设置int input1 = 1.1
,然后尝试使用printf("%f", input1)
,则输出为1.10000
或类似的东西。在运行时C中的1.1 == 1.10000
不会返回true,这就是导致问题的原因。
您可以根据输入使用不同的整数来区分要发生的事情,或者(如果确实需要,则可以)使用<
和>
运算符进行比较。即if (input1 > 1.09 && input1 < 1.11)
。
这将为您提供所需的结果。
答案 1 :(得分:0)
对于绝对准确的十进制相等性,绝对不要测试 binary 浮点数。 32位浮点数可以表示有限数量的离散值,这些离散值很少与精确的十进制值一致,而死于二进制而不是十进制浮点编码。
在任何情况下,为“菜单选择”使用浮点值都是一个坏主意,但是,如果您坚持认为,则可以这样修改代码:
if( fabs(input1 - 1.1) < 0.01 )
如果您避免从float
到double
的不必要的隐式转换,它也会起作用:
if( input1 == 1.1f )
但是通常还是不建议这样做-不适用于所有值。
答案 2 :(得分:0)
您要比较浮点数,因此需要执行以下操作:
if(input1==1.1f)
{
/* Will be true if the user inputs 1.1 */
}
不是
if(input1==1.1){}