Проблема с циклом if-else в управляемом пользователем цикле do-while - PullRequest
0 голосов
/ 28 мая 2019

Мой псевдокод:

Наилучший случай: 1) Запросить у пользователя число 2) Проверить, является ли ввод пользователя числовым значением 3) Если ввод пользователя действителен, выполнять функции floor, round и ceil для пользователяinput 4) Отображение значений floor, round и ceil для пользовательского ввода

В худшем случае: 1) Запросите у пользователя число 2) Проверьте, является ли пользовательский ввод числовым значением 3) Если ввод пользователя неверен, спросите,пользователь хочет повторить попытку с выбором Y / N 4) Если пользователь говорит «да», вернитесь к 1), если пользователь говорит «нет» - прекратить

#include <stdio.h>
#include <math.h>

int main(void) {

    float user_input;
    int a;
    char answ;

    do {
        printf ("Enter a number to find its lower bound, rounded, and upper bound values: ");

        if ((a = scanf("%f", &user_input) == 1)) {

            float floored_input = floor(user_input);
            float rounded_input = round(user_input);
            float ceiled_input = ceil(user_input);

            printf("Lower Bound: %1.0f\n", floored_input);
            printf("Rounded:     %1.0f\n", rounded_input);
            printf("Upper Bound: %1.0f\n", ceiled_input);

            break;

        } else {

            printf("Invalid input. Do you want to try again? (Y/N): ");
            scanf("%c", &answ);

        }
    } while(answ == 'Y' || answ == 'y');

    return 0;
}

Единственная проблема, с которой я сталкиваюсь, это когдаПользователь вводит значение, буквально отличное от 'i', программа завершается, и я снова в рабочем каталоге.

Пользователь может ввести любое число, и оно будет работать.Пользователь может ввести i, и ему или ей будет предложено указать Y / N

ОДНАКО, когда пользователь вводит «i2», «привет», «h», «b», «yoooo»,etc

Пользователь не получает опцию Y / N, и программа завершается

1 Ответ

0 голосов
/ 29 мая 2019

следующий предложенный код:

  1. чисто компилирует
  2. выполняет желаемую функциональность
  3. использует заголовочный файл: ctype.h функция: toupper()
  4. использует соответствующие функции для float значений
  5. правильно инициализирует переменную: answ

и теперь предложенный код:

#include <stdio.h>
#include <math.h>
#include <ctype.h>

int main(void) 
{
    float user_input;
    char answ = 'Y';

    while( toupper( answ ) != 'N' ) 
    {
        printf ("Enter a number to find its lower bound, rounded, and upper bound values: ");

        if ( scanf("%f", &user_input) == 1 ) 
        {
            float floored_input = floorf( user_input );
            float rounded_input = roundf( user_input );
            float ceiled_input  = ceilf(  user_input );

            printf( "Lower Bound: %1.0f\n", floored_input );
            printf( "Rounded:     %1.0f\n", rounded_input );
            printf( "Upper Bound: %1.0f\n", ceiled_input );
        } 

        do
        {
            printf( "Do you want to try again? {Y/N}: " );
            scanf( " %c", &answ );
            //printf( "debug: answ = %x\n", answ );
        } while( toupper(answ) != 'Y' && toupper( answ ) != 'N' );
    }
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...