Как я могу исправить мою ошибку в то время как? - PullRequest
0 голосов
/ 25 февраля 2009

Я пишу программу в Microsoft Visual Studio с C ++, которая будет извлекать информацию из файла .txt. В этом файле есть отрицательные числа, но когда я пытаюсь написать цикл while, в котором говорится, что делать, если есть отрицательное число, я получаю несколько ошибок.

Может кто-нибудь помочь мне с этим? Вот мой код, и я понимаю, что есть ошибки, но я не могу понять, как написать оператор цикла While, чтобы прочитать эти значения, которые отработали часы и почасовую ставку из файла .txt

Пример текстового файла:

45.0    10.50
-35.0   7.75
50.0    12.00
45.0   -8.50
30.0    6.50
48.0    -10.25
-50.0   10.00
50.0    8.75
40.0    12.75
56.0    8.50

Код:

//*****************************
// This program is to help calculate an employee's weekly gross pay as well as
// the net pay while showing the taxes that were taken off.
// The data that will be shown will be calculated from a .txt file 
// that was created and called employee.txt.

// Input:  Will be the inFile known as employee.txt
// Output: Gross pay, taxable income, federal tax, state tax, and net pay

// Typed by:  
// Date:  
//******************************

#include <iomanip>
#include <fstream>
#include <iostream>

using namespace std;

float computeGross(float, float);
void computeTaxes(float, float&, float&, float&);
float computeNetPay (float&, float&, float&, float&);

const float hours = 40;                 // Regular 40 hour work week
const float ovTime = 1.5;               // Overtime if hours go over 40
const float exemption = 200.0;          // Exemption  if pay goes over 200
const float fedTaxRate = 0.10;          // Federal Tax Rate
const float stTaxRate = 0.03;           // State Tax rate

ifstream inFile;
ofstream outFile;

int main()
{
    inFile.open("employee.txt");
    outFile.open("result.txt");

    float hours, rate, grossPay, taxableIncome, fedTax, stTax, NetPay;
    inFile >> hours >> rate;

    while(inFile)
    {
        if {
            (hours <= 0)&& (rate <= 0);
            outFile << "Invalid Data";
        }
        else{ 
            return 0;
        }
    }

    grossPay = computeGross(hours, rate);
    computeTaxes (grossPay, taxableIncome, fedTax, stTax);
    computeNetPay (grossPay, fedTax, stTax, NetPay);

    outFile << fixed << showpoint << setprecision(2);
    outFile << "Hours worked = " << hours << endl   
            << "Hourly rate = " << rate  << endl        
            << "Employee's gross pay = " << grossPay << endl
            << "Taxable Income = " << taxableIncome << endl
            << "Federal Taxes = " << fedTax << endl
            << "State Taxes = " << stTax << endl
            << "Net Pay = " << NetPay << endl;
    return 0;
}

float computeGross (float h, float r)           //Computes for the Gross Pay
{
    if (h > hours) 
        return hours * r + (h - hours) * r * ovTime;
    else 
        return h * r;
}
void computeTaxes(float g, float& taxable, float& fedTax, float& stTax) //Computes both Taxes
{
    taxable = g - exemption;

    if (taxable > 0.0)
    {
         fedTax = fedTaxRate * taxable;
         stTax = stTaxRate * taxable;
    }
    else
    {
        fedTax = 0.0;
        stTax = 0.0;
    }
}

float computeNetPay (float& grossPay, float& fedTax, float& stTax, float& NetPay)
{
    return NetPay = grossPay - fedTax - stTax;    
}

Ответы [ 3 ]

2 голосов
/ 25 февраля 2009

В вашей основной функции у вас есть:

while(inFile)
{
    if ((hours <= 0) && (rate <= 0))
    {
        outFile << "Invalid Data";
    }
    else { 
        return 0;
    }
}

Когда запускается else, программа завершается, функция main возвращается. Возможно, вы захотите continue break или ничего здесь вместо этого, этот оператор return завершает основную функцию, а не цикл While.

Чтобы получить все данные из файла, ваше утверждение чтения (inFile >> hours >> rate); нужно будет в том или ином цикле. Скажите, что после проверки на действительность, это может быть в остальном.

    while(inFile)
    {
         if ((hours <= 0) && (rate <= 0)) {

             outFile << "Invalid Data";
         }
         else { 
             // call the data functions
             // save the returned values     
         }

        //prime hours and rate for the next loop
        inFile >> hours >> rate;
    }
2 голосов
/ 25 февраля 2009

Ну ... я думаю, это то, что вы ищете:

Обратите внимание, что:

if ((hours <= 0) && (rate <= 0))

изменено на:

if ((hours <= 0) || (rate <= 0))

в противном случае он никогда не попадет в «неверные данные» с вашими данными

//*****************************
// This program is to help calculate an employee's weekly gross pay as well as
// the net pay while showing the taxes that were taken off.
// The data that will be shown will be calculated from a .txt file 
// that was created and called employee.txt.

// Input:  Will be the inFile known as employee.txt
// Output: Gross pay, taxable income, federal tax, state tax, and net pay

// Typed by:  
// Date:  
//******************************

#include <iomanip>
#include <fstream>
#include <iostream>

using namespace std;

float computeGross(float, float);
void computeTaxes(float, float&, float&, float&);
float computeNetPay (float&, float&, float&, float&);

const float hours = 40;                 // Regular 40 hour work week
const float ovTime = 1.5;               // Overtime if hours go over 40
const float exemption = 200.0;          // Exemption  if pay goes over 200
const float fedTaxRate = 0.10;          // Federal Tax Rate
const float stTaxRate = 0.03;           // State Tax rate

int main()
{

    ifstream inFile ("employee.txt");
    ofstream outFile ("result.txt");

    float hours, rate, grossPay, taxableIncome, fedTax, stTax, NetPay;

    if (inFile.is_open())
    {
        while (! inFile.eof() )
        {

            inFile >> hours;
            inFile >> rate;

            if ((hours <= 0) || (rate <= 0))
            {
                outFile << "Invalid Data";
            }
            else
            { 
                grossPay = computeGross(hours, rate);
                computeTaxes (grossPay, taxableIncome, fedTax, stTax);
                computeNetPay (grossPay, fedTax, stTax, NetPay);

                outFile << fixed << showpoint << setprecision(2);
                outFile << "Hours worked = " << hours << endl   
                        << "Hourly rate = " << rate  << endl        
                        << "Employee's gross pay = " << grossPay << endl
                        << "Taxable Income = " << taxableIncome << endl
                        << "Federal Taxes = " << fedTax << endl
                        << "State Taxes = " << stTax << endl
                        << "Net Pay = " << NetPay << endl;
            }
        }
    }

    return 0;
}

Остальное тоже самое

1 голос
/ 25 февраля 2009

Для начала, я думаю, что это:

if {
    (hours <= 0)&& (rate <= 0);
    outFile << "Invalid Data";
    }

Должно быть так:

if ((hours <= 0) && (rate <= 0)) {
    outFile << "Invalid Data";
}

Обратите внимание, что для правильного форматирования кода в StackOverflow вы должны использовать только пробелы, а не символы табуляции. Я думаю, что это вызывает проблемы с форматом.

...