2009-02-25 8 views
0

J'écris un programme dans Microsoft Visual Studio avec C++ qui va récupérer des informations à partir d'un fichier .txt. Dans ce fichier, il y a des nombres négatifs, mais quand j'essaye d'écrire une boucle while qui indique ce qu'il faut faire s'il y a un nombre négatif, j'obtiens plusieurs erreurs.Comment réparer mon erreur?

Quelqu'un peut-il m'aider s'il vous plaît avec ceci? Voici mon code et je réalise qu'il y a des erreurs mais je ne peux pas comprendre comment écrire l'instruction While pour lire ces valeurs qui sont les heures travaillées et le taux horaire du fichier .txt

Exemple de fichier texte:

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 

code:

//***************************** 
// 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;  
} 
+0

Désolé, il ne semble pas exactement comme ça ... n'a pas tout l'espace correctement. C'est juste que je ne peux pas comprendre comment obtenir la boucle While pour lire les nombres négatifs aussi –

+0

Pourriez-vous s'il vous plaît corriger le formatage et fournir un exemple de sortie? –

+0

Désolé, je pense que je l'ai réparé. quand je lance le code que je ne reçois que cette sortie Heures travaillées = 45.00 Taux horaire = 10,50 employé le salaire brut de = 498,75 revenu imposable = 298,75 Taxes fédérales = 29.88 Taxes Etat = 8,96 Pay Net = 459,91 –

Répondre

1

Pour commencer, je pense que ceci:

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

devrait être ceci:

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

Notez que pour obtenir le code pour formater correctement sur StackOverflow, vous ne devez utiliser des espaces, pas d'onglets. Je pense que c'est ce qui cause vos problèmes de format.

+0

ok j'ai essayé le ré-éditer pour que ça ait l'air mieux. J'espère que c'est le cas.En outre, lorsqu'il s'exécute, il ne récupère pas toutes les informations du fichier .txt lorsqu'il l'ouvre. Il récupère seulement la première heure et le taux horaire –

2

Dans votre fonction principale que vous avez:

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

Lorsque l'autre est déclenché le programme terminé, les principaux retours de fonction. Vous pourriez vouloir un continuer pause ou rien ici à la place, cette déclaration de retour se termine la fonction principale pas la boucle While.

Pour obtenir toutes les données sur le fichier votre instruction de lecture (inFile >> hours >> rate); devra être dans cette boucle ou une autre. Dire après le test IF pour la validité, il pourrait être dans l'Else.

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; 
    } 
+0

Ensuite, il se retrouverait avec une boucle while sans fin, car la lecture des données ne se fait pas à l'intérieur de la boucle. C'est quelque chose d'autre qui a besoin d'être réparé. – Thomas

+0

A continuer? Pourriez-vous s'il vous plaît si vous avez du temps m'aider avec cette cause ce programme est pour une classe et mon professeur ne nous a pas montré comment utiliser cette fonction. J'ai lu le livre, mais je n'ai pas d'exemples pour cette situation. –

+0

Vous n'avez besoin de rien à ce stade, la suite est juste un moyen de faire passer une boucle à l'itération suivante. Si vous ne mettez rien dans le reste, ça devrait aller. – Paxic

2

Eh bien .. je suppose c'est ce que vous cherchez:

Notez que le:

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

est modifiée:

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

sinon il a gagné » t jamais frappé les "données invalides" avec vos données fournies

//***************************** 
// 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; 
} 

Le reste est le même

+0

Belle prise sur l'AND vs OR. – Paxic

+0

ok Je reçois une erreur maintenant. Erreur 1 Erreur fatale C1083: Impossible d'ouvrir le fichier include: 'stdafax.txt': Aucun fichier ou répertoire lorsque le fichier est enregistré dans mon dossier Visual Studio avec ce projet –

+0

Voulez-vous dire "stdafx.h"? C'est un fichier généré http://en.wikipedia.org/wiki/Precompiled_header. – Paxic

Questions connexes