如果条件在控制台上的结果,则无法打印简单的嵌套

时间:2019-04-25 22:00:05

标签: c

这是一个简单的测试程序,在我完成输入以进入程序第二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 ;
}

3 个答案:

答案 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 )

如果您避免从floatdouble的不必要的隐式转换,它也会起作用:

if( input1 == 1.1f )

但是通常还是不建议这样做-不适用于所有值。

答案 2 :(得分:0)

您要比较浮点数,因此需要执行以下操作:

if(input1==1.1f)
{
    /* Will be true if the user inputs 1.1 */
}

不是

if(input1==1.1){}