无效的操作数和非法赋值转换

时间:2018-09-17 22:43:27

标签: c++ casting

该程序的目的是取一个美元金额并打印出将要退还的票据数量,以最有效地提供该金额以及剩余的零钱。 (即$ 523.33 = $ 50 x 10 / $ 20 x1 / $ 1 x 3 / .33剩余)。它应该工作,除了我在附件图像中得到的错误之外。我已经尝试过每次铸造的迭代,但是没有任何效果。

#include <iostream>
using namespace std;


int main()
{
    double withdrawAmount; //declare variable to store use input for desired withdraw amount

    do { //Ask for valid user input
       cout << "Please enter an amount to withdraw from yor account" << endl;
       cin >> withdrawAmount; //save user input into withdrawAmount variable
   } while (withdrawAmount < 1);

   //Print greatest # of bills that can be taken from the withdrawlAmount
     cout << "$50 bills :"<< (int) withdrawAmount / 50 << endl;    
   //Print number of $50 bills
     (int) withdrawAmount %= 50;
     cout << "$20 bills: " << (int) (withdrawAmount %= 50) / 20 << endl; 
   //Print number of $20 bills
     (int) withdrawAmount %= 20;
     cout << "$10 bills: " << (int) (withdrawAmount %= 20) / 10 << endl; 
  //Print number of $10 bills
   (int)withdrawAmount %= 10;
   cout << "$5 bills: " << (int) (withdrawAmount %= 10) / 5 << endl; 
  //Print number of $5 bills
   (int)withdrawAmount %= 5;
   cout << "$1 bills: " << (int) (withdrawAmount %= 5) / 1 << endl; 
  //Print number of $1 bills
   (int) withdrawAmount %= 1;
   cout << "Remaining: " << withdrawAmount / 1 << endl;
   return 0;
}

enter image description here

1 个答案:

答案 0 :(得分:2)

(int) withdrawAmount %= 50;应该替换为

withdrawAmount = std::fmod(withdrawAmount, 50);

与其他值相同。 (不要忘记#include <cmath>)。

作为替代:

double input; //declare variable to store use input for desired withdraw amount

do { //Ask for valid user input
   cout << "Please enter an amount to withdraw from yor account" << endl;
   cin >> input; //save user input into withdrawAmount variable
} while (input < 1);
int withdrawAmount = input; // rounded toward 0.

std::cout << "$50 bills :"<< withdrawAmount / 50 << std::endl;
withdrawAmount %= 50;

// And so on...

// Final remaining
std::cout << "Remaining: " << input - int(input) << std::endl;