Как повторно ввести переменную вне цикла - PullRequest
0 голосов
/ 10 октября 2018

Таким образом, все в моей программе работает нормально до того момента, когда в одной из введенных переменных возникает ошибка.

Пример. валовая оплата.Мне нужно повторно ввести номер сотрудника, но он продолжает давать тот, который уже был указан в начале.Я не уверен, как сделать возможным повторный ввод номера сотрудника вместо того, чтобы он уже выводился.Я могу использовать только циклы и операторы if.Я не могу делать массивы.

Пожалуйста, ознакомьтесь с кодом ниже

{
const int QUIT = 0, NO_NEG = 0;
int empNum = 1;
double grossPay, fedWith,
    stateWith, ficaWith, sum,
    totalGross = 0, totalFed = 0,
    totalState = 0, totalFica = 0,
    netPay, totalNetPay = 0;


cout << "Enter the following information:\n\n"
    << "Employee Number (0 to quit): ";
cin >> empNum;

while (empNum != QUIT)
{
    do
    {
        cout << "Gross pay: ";
        cin >> grossPay;

        while (grossPay < NO_NEG)
        {
            cout << "Gross pay may not be less than zero.\n";
            cout << "Re-enter Gross pay: ";
            cin >> grossPay;
        }

        cout << "Federal Withholding: ";
        cin >> fedWith;

        while (fedWith < NO_NEG)
        {
            cout << "Federal witholding may not "
                << "be less than zero.\n";
            cout << "Re-enter Federal Withholding: ";
            cin >> fedWith;
        }

        cout << "State Withholding: ";
        cin >> stateWith;

        while (stateWith < NO_NEG)
        {
            cout << "State witholding may not "
                << "be less than zero.\n";
            cout << "Re-enter State Withholding: ";
            cin >> stateWith;
        }

        cout << "FICA Withholding: ";
        cin >> ficaWith;

        while (ficaWith < NO_NEG)
        {
            cout << "FICA witholding may not be less than zero.\n";
            cout << "Re-enter FICA Withholding: ";
            cin >> ficaWith;
        }

        sum = (stateWith + fedWith + ficaWith);

        if (sum > grossPay)
        {
            cout << "\nERROR: Withholdings cannot"
                << " exceed gross pay.\n"
                << "\nPlease re-enter the data for this employee.\n"
                << "Processing the next employee:\n"
                << "\nEmployee Number (0 to quit): "
                << empNum << endl;
        }

        cout << "Processing the next employee:\n";

    } while (sum > grossPay);

    totalGross += grossPay;
    totalFed += fedWith;
    totalState += stateWith;
    totalFica += ficaWith;

    netPay = grossPay - sum;

    totalNetPay += netPay;

    cout << "Employee Number (0 to quit): ";
    cin >> empNum;

}

cout << "Total Gross Pay: $ " << totalGross << endl
    << "Total Federal Tax: $ " << totalFed << endl
    << "Total State Tax: $ " << totalState << endl
    << "Total FICA: $ " << totalFica << endl
    << "Total Net Pay: $ " << totalNetPay << endl;

return 0;
}

1 Ответ

0 голосов
/ 10 октября 2018

Вы уже вставляете его внизу.Когда вы спрашиваете:

cout << "Employee Number (0 to quit): ";
cin >> empNum;

Я бы предложил использовать getline (cin, string_name).Переключите вашу переменную empNum на C-строку.Это тип массива, но он также является строкой.

Переместите свои первые операторы cout и cin сверху первого цикла while внутрь цикла do-while.Например:

 while (empNum != "0")
 { 
     do { 
     cout << "Enter the following information:\n\n"
     << "Employee Number (0 to quit): ";
     getline(cin, empNum);

Кроме того, переназначьте переменную empNum с

 int empNum = 1;

на

 string empNum;

, а также на:

 cout << "Processing the next employee:\n";

Поместите эти две строки под ним, это очистит буфер, который, я полагаю, именно то, что вы хотите сделать при повторной установке переменных.

 cin.clear();
 cin.ignore();

Помимо этого, самый простой способ переустановки переменных, просто попросить их.Кроме того, вы говорите о повторном вводе переменной после того, как вводчик нажимает одну из ваших проверок на ложную информацию.Если это так, вы вводите данные для уже введенных неверных данных о сотруднике.Удачи в вашей программе!

Вы можете использовать это ^^^, хотя я обнаружил, что есть некоторые неприятные проблемы со сравнением строк.const char и chars нельзя сравнивать, строки нельзя сравнивать с chars, поэтому вы получите много ошибок.

В вашем описании говорится, что вам нужно повторно ввести переменную, а не вывести ее.Переменная empNum вводится повторно, если:

 (empNum != to QUIT)

- true.Единственный раз, когда ваша переменная будет повторно введена, это если ваши данные о сотруднике неверны.

...