Извините, я сделал ошибку, которую я использую, используя 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);
}
Когда я набираю алфавит, слово "Недопустимый ввод, пожалуйста, введите положительное число". спам в консоли, и система идет не так. Я знаю его проблему с типом данных. Как это решить? Помоги пожалуйста!! И спасибо, если вы предоставите мне полное решение. Спасибо.
#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;
}
edit: Фактический ответ здесь. Это дубликат. Ваша проблема связана с тем, что scanf
не потребляет то, что находится во входном буфере, когда он терпит неудачу, и, следовательно, перечитывает его и каждый раз отказывается.
C++
вместоC
, я бы порекомендовал вам использовать<iostream>
и использоватьstd::cin
для получения входных значений.void
для пустого списка параметров в c ++, так как он избыточен.