Генерация ошибки, когда пользователь не вводит кратные 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

Должно быть относительно просто связать это с другими ценностями монеты.

Другие вопросы по тегам