Невозможность напечатать простой вложенный, если результат условия на консоли - PullRequest
0 голосов
/ 26 апреля 2019

Это простая тестовая программа, в которой я пытаюсь получить результат «12 разгневанных мужчин», показанный на консоли, после того, как я закончу принимать входные данные для перехода в поджанр со 2-го printf программы. что я тут не так сделал? пожалуйста, не пытайтесь найти отношение к чему-либо здесь. Консоль просто попросит пользователя нажать 1 для действия, а затем спросит Humorous / Other, когда юмористически покажет 12 разгневанных мужчин после принятия ввода как 1.1.

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 голосов
/ 26 апреля 2019

Никогда не проверяйте двоичное число с плавающей запятой для точного равенства с десятичным действительным значением.32-разрядное число с плавающей запятой может представлять собой конечное число дискретных значений, немногие из которых совпадают с точным десятичным значением, умершим для двоичного кода, а не для десятичного кодирования с плавающей точкой.значения для «выбора меню» в любом случае, но если вы настаиваете, ваш код может быть исправлен таким образом:

if( fabs(input1 - 1.1) < 0.01 )

Это также работает, если вы избегаете ненужного неявного преобразования из float в double:

if( input1 == 1.1f )

но в целом это по-прежнему не рекомендуется - оно не будет работать для всех значений.

0 голосов
/ 26 апреля 2019

Вы хотите сравнить числа с плавающей запятой, поэтому вы хотите сделать следующее:

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

, а не

if(input1==1.1){}
0 голосов
/ 26 апреля 2019

Как и другие упоминают, не стоит прямо сравнивать поплавки, как вы пытаетесь это сделать.Например, если вы установите int input1 = 1.1, а затем попытаетесь использовать printf("%f", input1), вывод будет 1.10000 или что-то подобное.Это не вернет true для 1.1 == 1.10000 в C во время выполнения, что и является причиной возникновения проблемы.

Вы можете просто использовать разные целые числа, чтобы указать, что вы хотите, в зависимости от ввода, или (еслиВы действительно, действительно должны) Вы можете сравнить, используя операторы < и >.Т.е. if (input1 > 1.09 && input1 < 1.11).

Это даст вам желаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...