嵌套if语句C ++

时间:2017-06-20 01:42:46

标签: c++ if-statement nested

我尝试编写Nested if condition语句来计算三个条件下的工资提升,例如全职,2兼职或临时。但是,工资提高的结果无法计算。这里有任何逻辑问题吗?不知道错误在哪里。请帮忙。感谢您的评论。

#include <iostream> 
#include <string>
#include <iomanip>

using namespace std;

int main()
{
    char employmentStatus;
    float performanceScore, salaryRaise = 0.0;
    double fullTimeSalary = 10000;
    double partTimeSalary = 8000;
    double tempSalary = 5000;

    double rate;
    double bonus =500;


    cout << "What is your employment status?" << endl;
    cout << "Enter 1 (full-time), 2 (part-time), or 3 (temporary)"<< endl;
    cin >> employmentStatus;

    cout << "Now enter your performance score" << endl;
    cin >> performanceScore;
    cout << endl;

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


    if (employmentStatus == 1)
    {
        if(performanceScore >= 8)
        {
            rate = 0.04;
            salaryRaise = fullTimeSalary * (1 + rate) + bonus;
        }
        else if (performanceScore < 8 && performanceScore >= 6)
        {
            rate = 0.025;
            salaryRaise = fullTimeSalary * (1 + rate) + bonus;
        }
        else
        {
            salaryRaise = fullTimeSalary; 
        }
        cout << "Your salary raise is: $" << salaryRaise << endl;
    }

    else if (employmentStatus == 2)
    {

        if (performanceScore >= 8)
        {
            rate = 0.03;
            salaryRaise = partTimeSalary + (salaryRaise*rate);

        }
        if (performanceScore < 8 && performanceScore >= 6)
        {
            rate = 0.015;
            salaryRaise = partTimeSalary + (salaryRaise*rate);
        }
        if (performanceScore < 6 )
        {
            salaryRaise = partTimeSalary 
        }
    }

    else if (employmentStatus == 3)
    {
        salaryRaise = tempSalary 
    }

    else 
    {
        cout << " No result" << endl; 
    }   

    cout << "Your salary raise is: $" << salaryRaise << endl;

    system("pause");
    return 0;
}

1 个答案:

答案 0 :(得分:3)

您的问题因逻辑而异。

我修复后的完整代码:

#include <iostream> 
#include <string>
#include <iomanip>

using namespace std;

int main()
{
    char employmentStatus;
    float performanceScore, salaryRaise = 0.0;
    double fullTimeSalary = 10000;
    double partTimeSalary = 8000;
    double tempSalary = 5000;

    double rate;
    double bonus =500;


    cout << "What is your employment status?" << endl;
    cout << "Enter 1 (full-time), 2 (part-time), or 3 (temporary)"<< endl;
    cin >> employmentStatus;

    cout << "Now enter your performance score" << endl;
    cin >> performanceScore;
    cout << endl;

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


    if (employmentStatus == '1')
    {
        if(performanceScore >= 8)
        {
            rate = 0.04;
            salaryRaise = fullTimeSalary * (1 + rate) + bonus;
        }
        else if (performanceScore < 8 && performanceScore >= 6)
        {
            rate = 0.025;
            salaryRaise = fullTimeSalary * (1 + rate) + bonus;
        }
        else
        {
            salaryRaise = fullTimeSalary; 
        }
        cout << "Your salary raise is: $" << salaryRaise << endl;
    }

    else if (employmentStatus == '2')
    {

        if (performanceScore >= 8)
        {
            rate = 0.03;
            salaryRaise = partTimeSalary + (salaryRaise*rate);

        }
        if (performanceScore < 8 && performanceScore >= 6)
        {
            rate = 0.015;
            salaryRaise = partTimeSalary + (salaryRaise*rate);
        }
        if (performanceScore < 6 )
        {
            salaryRaise = partTimeSalary;
        }
    }

    else if (employmentStatus == '3')
    {
        salaryRaise = tempSalary;
    }

    else 
    {
        cout << " No result" << endl; 
        return 0;
    }   

    cout << "Your salary raise is: $" << salaryRaise << endl;

    return 0;
}

检测到问题并解释解决方案:

  1. 语法:缺少几个半冒号,你应该自己调试这个编译器告诉你到底在哪里。
  2. 逻辑:您正在执行此操作if (employmentStatus == 1)而不是if (employmentStatus == '1'),这在语法级别上不是问题,因为C ++会将char隐式转换为其ASCII代码,请参阅my answer on this以获得更好的解释
  3. 语法:system("pause")查看thisthisthis。放下它。
  4. 逻辑:如果没有结果你应该退出,不要再进一步显示加注,因此你必须在最后一个条件中添加return 0;