В языке Си решите ввод целого числа из алфавита и повторите цикл [дубликата]

0

Извините, я сделал ошибку, которую я использую, используя C++, но Im использует язык C. Я пишу программный код о вычислении некоторых формул. В первую очередь, я настраиваю меню для выбора пользователем. Затем я разрешаю им выбирать из 3 формул. Пример давления = сила/площадь. Я хочу получить значение силы и области как float от пользователя. Я хочу запрограммировать его так, как если бы сила была больше или равна 0, программа продолжает запрашивать значение области. В противном случае отобразите ошибку и задайте тот же вопрос. Я протестировал свою программу, она работает, если я нахожу отрицательное значение. Но если я запишу слово, программа повторяет цикл, который не остановить.

#include <stdio.h>
#include <stdlib.h>

int main (void)
{
int menu_selection,error_flag,repeater;
float force, area, pressure;

printf("Please select a formula. [0 - 3]\n>>");
scanf("%d",&menu_selection);
if(menu_selection==1)
    {
    error_flag=0;
    system("cls"); 

    printf("Pressure formula\n\n");
        do{
            error_flag=0;
            printf("Please key in the force applied.(N)\n>>");
            scanf("%f",&force);
            if(force>0)
            {
                printf("Please key in the surface area.(m^2)\n>>");
                scanf("%f",&area);

                pressure = force/area;

                printf("The pressure is %.2fPa.\n\n",pressure);
            }
            else
            {
                error_flag=1;
                printf("Invalid input, please key in a positive number.");
            }
        }while(error_flag==1);
    }

Когда я набираю алфавит, слово "Недопустимый ввод, пожалуйста, введите положительное число". спам в консоли, и система идет не так. Я знаю его проблему с типом данных. Как это решить? Помоги пожалуйста!! И спасибо, если вы предоставите мне полное решение. Спасибо.

  • 0
    Поскольку вы используете C++ вместо C , я бы порекомендовал вам использовать <iostream> и использовать std::cin для получения входных значений.
  • 0
    Я также рекомендовал бы не использовать void для пустого списка параметров в c ++, так как он избыточен.
Теги:
input
integer

2 ответа

0
#include <stdio.h>
#include <stdlib.h>
#include <iostream>    // Include the iostream for cin

int main(void)
{
    int menu_selection, error_flag;
    float force, area, pressure;

    printf("Please select a formula. [0 - 3]\n>>");
    scanf("%d", &menu_selection);
    if (menu_selection == 1)
    {
        error_flag = 0;
        system("cls");

        printf("Pressure formula\n\n");
        do{
            error_flag = 0;
            printf("Please key in the force applied.(N)\n>>");
            std::cin >> force;                     // Read value into force
            if (std::cin.good() && force >= 0)                  // Verify the force is of type float. cin will set its failbit if the user does not input the proper data type.
            {
                printf("Please key in the surface area.(m^2)\n>>");
                scanf("%f", &area);

                pressure = force / area;

                printf("The pressure is %.2fPa.\n\n", pressure);
            }
            else
            {
                error_flag = 1;
                printf("Invalid input, please key in a positive number.\n");
                std::cin.clear();                   // Clears the failbit
                std::cin.ignore(INT_MAX, '\n');     // Flushes the cin stream
            }
        } while (error_flag == 1);
    }

    return 0;
}
  • 0
    Это все еще вызывает бесконечный цикл, когда я набираю алфавит.
  • 0
    Мой плохой, забыл очистить хин.
Показать ещё 1 комментарий
0

edit: Фактический ответ здесь. Это дубликат. Ваша проблема связана с тем, что scanf не потребляет то, что находится во входном буфере, когда он терпит неудачу, и, следовательно, перечитывает его и каждый раз отказывается.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню