Генерация ошибки, когда пользователь не вводит кратные 5 центов (от 5 до 100)
Я пытаюсь, чтобы в моей программе отображалось сообщение об ошибке, когда я не вводил кратные 5 центов (от 5 до 100), например 0,12. Он делает все, что должен (к моему удовлетворению), но я не смог понять это. Хотя я ввожу неверный ввод, он все равно дает мне результаты, вместо отображения ошибки. Я думал, что, возможно, использование функции fmod внутри оператора if поможет мне. Я думаю, что моя проблема заключается в логической ошибке, которую я не вижу. Я был бы признателен, если бы я мог получить некоторые указания относительно того, как я могу пойти по этому поводу. Спасибо за ваше время.
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main()
{ double Dollar_Bill= 1.00;
double QUARTERS= 0.25;
double DIMES= 0.10;
double NICKELS = 0.05;
double Amount_Entered= 0.00;
//where I believe using fmod inside the parenthesis (Amount_Entered == 0.00) would be useful
if( Amount_Entered == 0.00)
{
cout<<"Please enter a purchase amount (5-100) : \n";
cin >> Amount_Entered;
double Change= Dollar_Bill- Amount_Entered;
double Q_Change = Change/QUARTERS;
double D_Change = fmod( Change, QUARTERS)/0.10;
double N_Change = fmod( Change,QUARTERS)/0.10;
cout<<"You entered an amount of: "<<Amount_Entered<<" cents."<<endl;
cout<<"Your change of "<<Change<<" is given as: "<<static_cast<int>(Q_Change)<<" Quarters, "<<static_cast<int>(D_Change)<<" Dime(s), and "<<static_cast<int>(N_Change)<<" Nickel(s)."<<endl;
double Num_of_Coins = static_cast<int>(Q_Change) + static_cast<int>(D_Change) + static_cast<int>(N_Change);
cout<<"The value of your "<< static_cast<int>(Num_of_Coins) <<" coins adds up to:"<< Change<<"cents."<<endl;
cout<<"Thank you for using my program."<<endl;
}
//perhaps something can go here? Such as an else if statement?
else
{
cout<<"Unable to process amount entered. Please enter a valid amount."<<endl;
}
return 0;
}
Я сделал один, используя значения int, но все еще имею ту же проблему.
#include <iostream>
using namespace std;
int main()
{
int Dollar_Bill = 100;
int Quarters = 25;
int Dimes = 10;
int Nickels = 5;
int Amount_Entered = 0;
if (Amount_Entered %5 == 0)
{ cout<<"Please enter a purchase amount (5-100)"<<endl;
cin>> Amount_Entered;
int change = Dollar_Bill - Amount_Entered;
int Q_change = change/Quarters;
int D_change = (change%Quarters)/10;
int N_change = (change%Quarters)/10;
cout<<"You entered an amount of: "<< Amount_Entered<<" cents"<<endl;
cout<<"Your change of "<<change<<" is given as: "<<Q_change<<"Quarter(s)"<<D_change<<" Dime(s)"<<N_change<<" Nickel(s)"<<endl;
int Num_of_Coins = Q_change + D_change + N_change;
cout<<"The value of your "<<Num_of_Coins<<" coins add up to: "<<change<<"cents."<<endl;
cout<<"Thank you for using my program."<<endl;
}
else
{
cout<<"Unable to process an invalid amount purchase amount of "<<Amount_Entered<<"cents."<<endl;
cout<<"Thank you for using my program."<<endl;
}
}
1 ответ
Ваш подход здесь некорректен, но это, очевидно, домашний вопрос, поэтому я постараюсь дать вам подсказку, чтобы вернуться на правильный путь.
Прежде всего, конвертируйте все типы в целые числа с единицами центов. Это упростит математику. Оператор == для двойников, вероятно, не даст ожидаемого результата, как в случае с оператором /, из-за точности и округления.
То, что вы хотите исследовать, является целочисленным делением. Для целых чисел оператор / даст вам частное, а оператор% даст вам остаток, который идеально подходит для вашего приложения.
Пример:
int money = 80; //cents
int numQuarters = money / 25; // == 3 quarters
int remainingChange = money % 25; // == 5 cents
Должно быть относительно просто связать это с другими ценностями монеты.