2017-10-17 4 views
-2
if (...)      //enough for promo 
{ 
    if (...)     //accept offer 
    **promo sequence** 
    else (...)    //doesn't accept offer (regular purchase) 
    **regular sequence** 
} 
else (...)     //not enough for promo 
**regular sequence** 

Je suis encore novice en programmation. On m'a donné une tâche pour écrire un programme dans une boucle. Le client obtient des timbres pour les achats. S'il a assez de timbres, il peut avoir un objet gratuit. Cependant, s'il refuse l'offre, cela devient un achat régulier et le nombre de timbres augmente encore. J'ai réussi à écrire le programme de travail (bien que ce soit assez long), et je peux le coller ici si ça aide.Passer d'une instruction if à l'autre

La question est: puis-je en quelque sorte aller à la séquence régulière si le client n'accepte pas l'offre (au lieu de réécrire la séquence régulière)?

Merci!

+3

Placez la séquence régulière dans une fonction et appelez-la des deux côtés. – Steve

+1

(Et d'ailleurs, mettez aussi la séquence promo dans une fonction) – Steve

+0

Oui, vous pouvez refactoriser la logique dans une fonction séparée, puis appeler la fonction dans les deux instructions else. Vous pourriez aussi aller, mais ce serait une mauvaise utilisation horrible de goto. – xyious

Répondre

2

Avez-vous essayé de fusionner vos deux if-checks? Si vous êtes contre la création d'une fonction pour promo sequence et regular sequence, vous pouvez combiner la logique des instructions if en un seul chèque combiné:

if (... && ...) //enough for promo and accept offer 
    **promo sequence** 
else   //not enough for promo or doesn't accept offer (regular purchase) 
    **regular sequence** 
1

Il y a plusieurs options. Vous pouvez le transformer en un seul si, comme le suggère frslm. Parfois, la logique d'offre et d'acceptation d'une promo est trop difficile à mettre dans une seule instruction if. Dans ce cas, vous pouvez utiliser un booléen comme indicateur indiquant si la promotion a été acceptée:

bool accepted_promo = false; 
if (...)      //enough for promo 
{ 
    ** steps to offer and accept a promo offer ** 
    if (...)     //accept offer 
    { 
     **promo sequence** 
     accepted_promo = true; 
    } 
} 

if (!accepted_promo) 
    **regular sequence**