Я попытался написать вложенное условие if для расчета повышения зарплаты в трех условиях, таких как полный рабочий день, 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;
}
-2
Thomas Alexander 20 Июн 2017 в 04:42
Пара пропущенных точек с запятой. Компилятор должен сообщать вам, где.
 – 
user4581301
20 Июн 2017 в 04:49
Подсказка: char employmentStatus не то же самое, что int employmentStatus.
 – 
user4581301
20 Июн 2017 в 04:54
2
Что вы вкладываете? Каковы ваши ожидаемые результаты? Каковы ваши фактические результаты? Если оставить все это в стороне, мы сможем продолжить только половину деталей.
 – 
John3136
20 Июн 2017 в 04:55
Почему бы просто не попробовать использовать переключатель для очистки кода
 – 
tanginaMoBobo
20 Июн 2017 в 06:54
Спасибо ребята. Я попробую разными способами сделать это яснее и понятнее, так как я уже знаю проблемы, возникающие при использовании оператора if.
 – 
Thomas Alexander
20 Июн 2017 в 08:06

1 ответ

Лучший ответ

Ваши проблемы различаются от логики к синтаксису.

Полный код после моего исправления:

#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, см. мой ответ по этому поводу для лучшего объяснения.
  3. Синтаксис: system("pause") посмотрите this, this и это. Просто брось это.
  4. Логика: Если результатов нет, вы должны выйти, не идите дальше и не показывайте повышение, следовательно, вам нужно добавить return 0; в последнее условие.
3
Oussama Ben Ghorbel 20 Июн 2017 в 05:02
1
Ваши комментарии очень полезны. Большое спасибо. Второй комментарий - самый важный, и я не умею его писать.
 – 
Thomas Alexander
20 Июн 2017 в 05:50
Удачи Том :)
 – 
Oussama Ben Ghorbel
20 Июн 2017 в 06:43