总计在C ++程序结束时没有加起来

时间:2013-06-29 17:44:18

标签: c++

您好我正在完成作业。我花了很多时间,无法弄清楚为什么在我的计划结束时“Total Commission”和“Total Due”没有加起来。我是一个初学者,所以任何可以引导我朝着正确方向前进的东西都会非常感激。谢谢。

原始代码

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{

const double PC_BASE_SALES = 6000.00, //PC is Personal Computers
             PC_COMMISSION = 0.12,
             PRINTER_BASE_SALES = 2500.00,
             PRINTER_COMMISSION = 0.10,
             ACCESSORIE_BASE_SALES = 2000.00,
             ACCESSORIE_COMMISSION = 0.10,
             MAINTENANCE_BASE_SALES = 1500.00,
             MAINTENANCE_COMMISSION = 0.06;

double       baseSalary = 0.00,
             pcSales = 0.00,
             printerSales = 0.00,
             accessorieSales = 0.00,
             maintenanceSales = 0.00,
             totalCommission = 0.00,
             totalDue = 0.00,
             noCommission = 0.00,
             pcCommission = baseSalary * PC_COMMISSION,
             printerCommission = baseSalary * PRINTER_COMMISSION,
             accessorieCommission =  baseSalary * ACCESSORIE_COMMISSION,
             maintenanceCommission = baseSalary * MAINTENANCE_COMMISSION;

int          idNumber; //salesman identification number

do
{
cout << "Please Enter Salesman Identification or -999 to Terminate ";
cin >> idNumber;

if (idNumber == -999)
    return 0;
else

cout << "Please Enter Salesman Base Salary\t\t\t  ";
cin >> baseSalary;

cout << "Please Enter Personal Computer Sales\t\t\t  ";
cin >> pcSales;

cout << "Please Enter Printer Sales\t\t\t\t  ";
cin >> printerSales;

cout << "Please Enter Accessories Sales\t\t\t\t   ";
cin >> accessorieSales;

cout << "Please Enter Maintenance Sales\t\t\t\t  ";
cin >> maintenanceSales;
cout << endl;
cout << endl;
cout << endl;
cout << endl;

cout << "\t\t\t  My Computer Company\n ";
cout << endl;
cout << "\t\t\t Commission Statement\n ";
cout << endl;
cout << "\t\t\t  Salesman Number " << idNumber << endl;
cout << endl;
cout << "\t\t   ********************************\n";
cout << endl;

cout << fixed;
cout << setprecision(2);

cout << left << setw(20) << "Product";
cout << right << setw(20) << "Sales Amount";
cout << right << setw(20) << "Commission";
cout << "\n" << endl;

cout << left << setw(20) << "Personal Computers";
cout << right << setw(20) << pcSales;

while (pcSales > PC_BASE_SALES)
    {
        double pcCommission = baseSalary * PC_COMMISSION;
        cout << right << setw(20) << pcCommission;
        cout << "\n" << endl;
        pcCommission += totalCommission;
        break;
    }
    while (pcSales < PC_BASE_SALES)
    {
    cout << right << setw(20) << noCommission;
    cout << "\n" << endl;
    break;
    }

cout << left << setw(20) << "Printers";
cout << right << setw(20) << printerSales;
    while (printerSales > PRINTER_BASE_SALES)
    {
        double printerCommission = baseSalary * PRINTER_COMMISSION;
        cout << right << setw(20) << printerCommission;
        cout << "\n" << endl;
        printerCommission += totalCommission;
        break;
    }
    while (printerSales < PRINTER_BASE_SALES)
    {
        cout << right << setw(20) << noCommission;
        cout << "\n" << endl;
        break;
    }

cout << left << setw(20) << "Accessories";
cout << right << setw(20) << accessorieSales;
    while (accessorieSales > ACCESSORIE_BASE_SALES)
    {
        double accessorieCommission =  baseSalary * ACCESSORIE_COMMISSION;
        cout << right << setw(20) << accessorieCommission;
        cout << "\n" << endl;
        accessorieCommission += totalCommission;
        break;
    }
    while (accessorieSales < ACCESSORIE_BASE_SALES)
    {
    cout << right << setw(20) << noCommission;
    cout << "\n" << endl;
    break;
    }

cout << left << setw(20) << "Maintenance";
cout << right << setw(20) << maintenanceSales;
    while (maintenanceSales > MAINTENANCE_BASE_SALES)
    {
        double maintenanceCommission = baseSalary * MAINTENANCE_COMMISSION;
        cout << right << setw(20) << maintenanceCommission;
        cout << "\n" << endl;
        maintenanceCommission += totalCommission;
        break;
    }
    while (maintenanceSales < MAINTENANCE_BASE_SALES)
    {
    cout << right << setw(20) << noCommission;
    cout << "\n" << endl;
    cout << endl;
    break;
    }

cout << endl;

      totalCommission =  pcCommission + printerCommission + accessorieCommission +   
      maintenanceCommission;
      totalDue = baseSalary + totalCommission;

cout << left << setw(20) << "Total Commission";
cout << right << setw(40) << totalCommission;
cout << "\n" << endl;

      cout << left << setw(20) << "Base Pay";
cout << right << setw(40) << baseSalary;
cout << "\n" << endl;

cout << left << setw(20) << "Total Due";
cout << right << setw(40) << totalDue;
cout << "\n" << endl;

    } while ( idNumber != -999);

system ("PAUSE");
return 0;

更新代码

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{

const double PC_BASE_SALES = 6000.00, //PC is Personal Computers
             PC_COMMISSION = 0.12,
             PRINTER_BASE_SALES = 2500.00,
             PRINTER_COMMISSION = 0.10,
             ACCESSORIE_BASE_SALES = 2000.00,
             ACCESSORIE_COMMISSION = 0.10,
             MAINTENANCE_BASE_SALES = 1500.00,
             MAINTENANCE_COMMISSION = 0.06;

double       baseSalary = 0.00,
             pcSales = 0.00,
             printerSales = 0.00,
             accessorieSales = 0.00,
             maintenanceSales = 0.00,
             totalCommission = 0.00,
             totalDue = 0.00,
             noCommission = 0.00,
             pcCommission = baseSalary * PC_COMMISSION,
             printerCommission = baseSalary * PRINTER_COMMISSION,
             accessorieCommission =  baseSalary * ACCESSORIE_COMMISSION,
             maintenanceCommission = baseSalary * MAINTENANCE_COMMISSION;

int          idNumber; //salesman identification number

do
{
cout << "Please Enter Salesman Identification or -999 to Terminate ";
cin >> idNumber;

if (idNumber == -999)
    return 0;
else

cout << "Please Enter Salesman Base Salary\t\t\t  ";
cin >> baseSalary;

cout << "Please Enter Personal Computer Sales\t\t\t  ";
cin >> pcSales;

cout << "Please Enter Printer Sales\t\t\t\t  ";
cin >> printerSales;

cout << "Please Enter Accessories Sales\t\t\t\t   ";
cin >> accessorieSales;

cout << "Please Enter Maintenance Sales\t\t\t\t  ";
cin >> maintenanceSales;
cout << endl;
cout << endl;
cout << endl;
cout << endl;

cout << "\t\t\t  My Computer Company\n ";
cout << endl;
cout << "\t\t\t Commission Statement\n ";
cout << endl;
cout << "\t\t\t  Salesman Number " << idNumber << endl;
cout << endl;
cout << "\t\t   ********************************\n";
cout << endl;

cout << fixed;
cout << setprecision(2);

cout << left << setw(20) << "Product";
cout << right << setw(20) << "Sales Amount";
cout << right << setw(20) << "Commission";
cout << "\n" << endl;

cout << left << setw(20) << "Personal Computers";
cout << right << setw(20) << pcSales;

if (pcSales > PC_BASE_SALES)
    {
        double pcCommission = baseSalary * PC_COMMISSION;
        cout << right << setw(20) << pcCommission;
        cout << "\n" << endl;
        totalCommission += pcCommission;
    }
if (pcSales < PC_BASE_SALES)
    {
    cout << right << setw(20) << noCommission;
    cout << "\n" << endl;
    }

cout << left << setw(20) << "Printers";
cout << right << setw(20) << printerSales;

if (printerSales > PRINTER_BASE_SALES)
    {
        double printerCommission = baseSalary * PRINTER_COMMISSION;
        cout << right << setw(20) << printerCommission;
        cout << "\n" << endl;
        totalCommission += printerCommission;
    }
if (printerSales < PRINTER_BASE_SALES)
    {
        cout << right << setw(20) << noCommission;
        cout << "\n" << endl;
    }

cout << left << setw(20) << "Accessories";
cout << right << setw(20) << accessorieSales;

if (accessorieSales > ACCESSORIE_BASE_SALES)
    {
        double accessorieCommission =  baseSalary * ACCESSORIE_COMMISSION;
        cout << right << setw(20) << accessorieCommission;
        cout << "\n" << endl;
        totalCommission += accessorieCommission;
    }
if (accessorieSales < ACCESSORIE_BASE_SALES)
    {
    cout << right << setw(20) << noCommission;
    cout << "\n" << endl;
    }

cout << left << setw(20) << "Maintenance";
cout << right << setw(20) << maintenanceSales;
if (maintenanceSales > MAINTENANCE_BASE_SALES)
    {
        double maintenanceCommission = baseSalary * MAINTENANCE_COMMISSION;
        cout << right << setw(20) << maintenanceCommission;
        cout << "\n" << endl;
        totalCommission += maintenanceCommission;
    }
if (maintenanceSales < MAINTENANCE_BASE_SALES)
    {
    cout << right << setw(20) << noCommission;
    cout << "\n" << endl;
    cout << endl;
    }

cout << endl;

totalCommission =  pcCommission + printerCommission + accessorieCommission + maintenanceCommission;
totalDue = baseSalary + totalCommission;

cout << left << setw(20) << "Total Commission";
cout << right << setw(40) << totalCommission;
cout << "\n" << endl;

cout << left << setw(20) << "Base Pay";
cout << right << setw(40) << baseSalary;
cout << "\n" << endl;

cout << left << setw(20) << "Total Due";
cout << right << setw(40) << totalDue;
cout << "\n" << endl;

    } while ( idNumber != -999);

system ("PAUSE");
return 0;

}

2 个答案:

答案 0 :(得分:3)

您是否有意为混淆的C ++竞赛编写代码?

这(作为几个类似的例子):

while (printerSales > PRINTER_BASE_SALES)
{
    double printerCommission = baseSalary * PRINTER_COMMISSION;
    cout << right << setw(20) << printerCommission;
    cout << "\n" << endl;
    printerCommission += totalCommission;
    break;
}

与:

完全相同
if (printerSales > PRINTER_BASE_SALES)
{
    double printerCommission = baseSalary * PRINTER_COMMISSION;
    cout << right << setw(20) << printerCommission;
    cout << "\n" << endl;
    printerCommission += totalCommission;
}

因为break在循环内是无条件的,因此循环只运行一次。这可能是你想要的第一个。

此外,由于printerCommission是循环内部的局部变量,因此不会执行任何有用的操作。

    printerCommission += totalCommission;
你的意思是:

    totalCommission += printerCommission;

此外,正如评论所说,使用doublefloat计算金钱最终会出错,因为浮点值有时会错误地舍入。例如,在二进制浮点表示中,值0.1,0.2和0.6和0.7分别为0.099999999999999,0.199999999999999,0.59999999999999和0.699999999999。它与尝试以十进制表示1/3相同,0.333333333 - 无论使用多少位数,它都不能“正好1/3”。如果你使用这些值做足够的数学运算,它将最终“错误”。但是你应该得到大致正确的价值,给予或拿一分钱或者任何一小部分货币被称为。

答案 1 :(得分:0)

这是我发现的问题:

没有else{的{​​{1}}语句只会执行下一个语句:

}

您是否已使用调试器单步调试代码?