Оператор if или не возвращает истину, когда это должно быть - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь написать функцию, которая преобразует градусы кельвина в градусы Цельсия или Фаренгейта на основе пользовательского ввода, я хочу, чтобы он продолжал запрашивать пользователя, если он вводит недопустимый ввод, но независимо от ввода, он печатает «Недействительный ввод» и l oop повторяется, даже если я печатаю значение y для его проверки, и оно возвращается как 'C' или 'F'

(ReadChar () просто использует scanf и возвращает символ)

do
    {
        printf("Choose Celsius or Farenheit (F/C): ");
        y = ReadChar();
        y = toupper(y);
        printf("%c", y);
        if ((y != 'C') || (y != 'F'))
        {
            printf("Invalid Input\n");
        }
    }while ((y != 'C') || (y != 'F'));
    return(y);

Ответы [ 2 ]

2 голосов
/ 05 мая 2020

Вы неверно перевернули логи c. Предполагая, что вы начали с ((y == 'C') || (y == 'F')), который определяет допустимый ввод, и теперь вы хотите инвертировать условие для определения недопустимого ввода, вам нужно изменить logi c на ((y != 'C') && (y != 'F')) (см. Закон ДеМоргана).

0 голосов
/ 05 мая 2020

Посмотрите, в вашем условии while вы поставили условие ИЛИ, которое будет истинным, потому что вы можете поставить только символ в y (либо 'C' ИЛИ ​​'F'), попробуйте && внутри, как:

do
    {
        printf("Choose Celsius or Farenheit (F/C): ");
        y = ReadChar();
        y = toupper(y);
        printf("%c", y);
        if ((y != 'C') && (y != 'F'))
        {
            printf("Invalid Input\n");
        }
    }while ((y != 'C') && (y != 'F'));
    return(y);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...