2010-08-20 4 views
1

salut je viens de commencer à apprendre C++. J'essaie de comprendre comment faire un changement de variable en fonction d'une autre variable. Il montre une réponse étrange quand je l'essaie idk où il l'obtient. de toute façon je vais juste mettre mon code ici et j'espère que quelqu'un comprend ce que je fais.Je veux faire une instruction 'si' que si une variable est inférieure à 80 t = 0 mais si la variable est terminée t = x-80

#include <iostream> 

long int mult (float hours,float payrate,float tax,float overtimerate,float overtimehours,float overtimeday,float insurance); 

int main() 
{ 
float insurance; 
float hours; 
float payrate; 
float tax; 
float overtimerate; 
float overtimehours; 
float overtimeday; 
insurance=.81; 
overtimehours=0; 
overtimerate=1.5; 
tax=4.93372123545367; 
    std::cout<<"Paycheck calculator\n"; 
    std::cout<<"Enter your hours\n"; 
    std::cin>>hours; 
    std::cin.ignore(); 
    std::cout<<"Did you work over 8 hours in a day?\n If so enter how much? If none enter 0\n"; 
    std::cin>>overtimeday; 
if (hours>80) 
{ 
overtimehours=((hours - 80)+overtimeday); 
    } 
    std::cout<<overtimehours+overtimeday<<"\n"; 
    std::cout<<"Enter your pay rate\n"; 
    std::cin>>payrate; 
    std::cin.ignore(); 
    std::cout<<"Your paycheck should be approximately: "<<((overtimeday+overtimehours)*(overtimerate*payrate 
))+(((hours-overtimehours)*payrate)-((((hours-(overtimeday+overtimehours))*payrate)/tax) 
-insurance))<<"\n"; 
} 
+2

S'il vous plaît utiliser les noms de variables plus descriptives que x, t, w et z – quantumSoup

+0

En outre, que vous entrez, et quelle est la réponse étrange? –

+0

j'entre dans mes heures 80 et aussi entrer mon payrate 17 et obtenir un résultat de mon salaire = salaire net –

Répondre

2

Vous devez affecter une valeur à t avant de l'utiliser. Dire float t; ne lui donnera pas une valeur significative. Idem hours et rate. Attribuez-les avant en faisant x=(t*w)+((hours-t)*rate);.

2

vous n'avez pas initialisé heures (il est toujours bon d'initialiser toutes vos variables locales)

note également que « heures » est de type float et ceux-ci ne sont pas représentés exactement si votre comparaison avec 80 peut donner un résultat différent de ce que vous attendiez.

9

Dans l'expression:

x=(t*w)+((hours-t)*rate);

Vous utilisez t, même si t n'a jamais été défini. t sera indéfini à ce stade, et peut avoir n'importe quelle valeur. La même chose avec hours et rate.

Votre compilateur aurait dû vous donner des avertissements sur les variables non initialisées. En regardant encore plus votre code, il semble que vous essayez d'établir des "règles" pour l'heure, le taux et t, puis que vous remplissez plus tard les valeurs, en espérant que ces "règles" seront conservées.

C++ fait et non fonctionne comme ceci. C'est un langage séquentiel, ce qui signifie que chaque instruction est exécutée une fois, comme si elle était lue, de haut en bas.

Vous devez changer votre flux de programme soit:

  1. Gather les variables
  2. faire des calculs et une logique
  3. sortie les réponses.

Il semble que vous inversiez les étapes 1 et 2, en essayant de configurer les calculs avant de regrouper les variables.

1

Je vois que vous avez une fonction déclarée:

int mult (float x,float t,float w,float hours, float rate,float z); 

que vous ne faites jamais rien avec. Je pense que le code que vous avez dans main appartient la plupart du temps dans mult et que votre principal devrait assigner des valeurs à ces variables ou inviter l'utilisateur pour eux et les lire de cin. Vous faites cela pour certaines variables plus tard, mais n'utilisez jamais ce que vous avez lu.

Je suis d'accord avec @quantumSoup btw, vos variables sont mal nommées.En outre, votre code est vraiment dans un ordre étrange. Cela rend difficile de deviner ce que vous voulez.

1

D'autres réponses ont souligné des failles très graves dans votre code, alors vous devriez les prendre au sérieux, mais il y a une chose, le sujet suggère que vous luttez avec, cela n'a pas été expliqué. Laisse-moi essayer.

Je pense que vous êtes aux prises avec un moyen de calculer overtime. Vous prenez une entrée d'un utilisateur, qui indique le nombre de hours de travail. Si ce nombre est inférieur ou égal à 80, il n'y a pas d'heures supplémentaires. Sinon, le temps supplémentaire est égal à hours - 80, non?

Vous pouvez exprimer la logique en C++ comme ceci:

float hours; 
float overtime; 

//.... 

cout<<"enter the amount of hours you have worked\n"; 
cin>>hours; 

if(hours > 80) 
{ 
    overtime = hours - 80; 
} 
else 
{ 
    overtime = 0; 
} 

Si vous initialisez la variable overtime-0, vous pouvez omettre la partie else.

float hours; 
float overtime = 0; 

//.... 

cout<<"enter the amount of hours you have worked\n"; 
cin>>hours; 

if(hours > 80) 
{ 
    overtime = hours - 80; 
} 
+0

merci pour expliquer ceci. Je me rends compte que mon codage a besoin d'être travaillé et je travaille pour le nettoyer et le rendre lisible, mais merci à tous pour votre contribution, cela m'aide à mieux comprendre la logique. –

Questions connexes