C: Объединение операторов while и if - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь написать программу на C, которая вызывает одну из двух функций на основе ввода, предоставленного пользователем.

Программа должна сказать «вы выбрали A», если пользователь вводит «1», и «вы выбрали B», если пользователь вводит «2». У меня проблема в том, что сообщение «Вы выбрали А» возвращается независимо от того, введен ли пользователь 1 или 2 (см. Скриншоты).

Выбор 1

Выбор 2

Вот мой код:

include <stdio.h>

void celsiusFahrenheit()
{
    printf("You chose A");
}

void fahrenheitCelsius()
{
    printf("You chose B");
}

int main()
{
    int selection;
    printf("Please enter '1' to convert celsius to fahrenheit, or enter '2' to convert fahrenheit to celsius: ");
    scanf_s("%d", &selection);
    while (selection < 1 || selection > 2)
    {
        printf("Please enter a valid entry of either 1 or 2: ");
        scanf_s("%d", &selection);
    }
    if (selection = 1)
    {
        celsiusFahrenheit();
    }
    else
    {
        fahrenheitCelsius();
    }
}

Буду благодарен за любую помощь, которую вы можете оказать!

1 Ответ

0 голосов
/ 05 ноября 2018

Вы присваиваете целочисленную константу целому числу (selection = 1) и проверяете ее истинное значение, и оно будет всегда истинным. Как уже указывалось в комментариях, вы можете использовать опцию -Wall, которая предупредит вас,

warning: suggest parentheses around assignment used as truth value [-Wparentheses]

 if (selection = 1)

     ~~~~~~~~~~^~~

Или измените условное выражение if следующим образом:

 if (1 == selection)

Если бы вы допустили ту же ошибку (присваивание) в вышеприведенном выражении, компилятор сгенерировал бы ошибку даже без опции -Wall, и вы бы избежали этой ошибки в своей программе.

...