Question

#include <stdio.h>
#include <iostream>
using namespace std;

float cost, total;
bool loop(char item){
        switch (toupper(item)) {
            case 'A':
                cost = 4.25;        
                return true;
            case 'B':
                cost = 5.57;
                return true;
            case 'C':
                cost = 5.25;
                return true;
            case 'D':
                cost = 3.75;
                return true;
            case 'T':
                return false;
        }
        return true;
}

int main(){
        char item;
        do {
            printf("\nEnter Item Ordered [A/B/C/D] or T to calculate total:");
            scanf("%c", &item);
            total = total + cost;
        } while (loop(item)); 
        printf("Total Cost: $%f\n", total);
}

Laissez-moi sortir le processus:

$ ./Case3.o 

Enter Item Ordered [A/B/C/D] or T to calculate total:a

Enter Item Ordered [A/B/C/D] or T to calculate total:
Enter Item Ordered [A/B/C/D] or T to calculate total:b

Enter Item Ordered [A/B/C/D] or T to calculate total:
Enter Item Ordered [A/B/C/D] or T to calculate total:a

Enter Item Ordered [A/B/C/D] or T to calculate total:
Enter Item Ordered [A/B/C/D] or T to calculate total:t
Total Cost: $28.139999

Pourquoi est-il après la première printf son impression de la printf deux fois mais me sauter d'entrée la première fois. alors comment est-il calculait 5,24 + 5,57 + 5,24 égale à 28,14?

Était-ce utile?

La solution

Comme d'autres l'ont mentionné, lorsque vous appuyez sur Entrée, deux personnages s'entrée, the character you enter + the newline, vous devez tenir compte pour les deux.

Les solutions possibles sont:

Méthode 1: La voie C

 scanf(" %c", &item);
       ^^^

Ajoutez un espace ici, ou la meilleure approche,

Approche 2: Le chemin de C ++

utilisez simplement la façon C ++ d'obtenir les commentaires de l'utilisateur.

cin >> item;

Pourquoi le résultat est non défini? Parce que vous ne l'avez pas initialisez la total variable Il en résulte Comportement non défini vous donnant la sortie inattendue.
total est mondiale donc il sera Par défaut Initialisé à 0,0.
Vraie raison pour résultat non définie est @ la réponse mystique.

Autres conseils

enter est une combinaison de touches - vous avez besoin d'en rendre compte:)

Quant à vos calculs, vous ne initialize total à 0 donc la valeur initiale est indéterminée.

ne faisait pas attention à la portée - la vraie réponse pour le calcul est que le nouveau ajoute le coût précédent boucle lorsque enter est pressé. Ceci est indiqué dans la réponse de Mysticial.

Depuis la newline a été mentionné, je vais répondre à l'autre question de savoir pourquoi 28.14.

Notez que dans votre commutateur, la valeur par défaut est juste retour. cost est jamais mis. Par conséquent, quand il lit dans le newline il saute le bloc de commutation et les feuilles coûtent intacte.

Le résultat est donc ceci:

total = 0;  // It's actually undefined since you didn't initialize, but it probably started as zero.

total += 4.25;    //  For a
total += 4.25;    //  For '\n' after the 'a'

total += 5.57;    //  For b
total += 5.57;    //  For '\n' after the 'b'

total += 4.25;    //  For a
total += 4.25;    //  For '\n' after the 'a'

La réponse finale 28.14

Le t qui est entré dans la dernière ne soit pas ajouté à total.

Ceci est facile à expliquer. Lorsque vous entrez a et appuyez sur la touche ENTER, ces lieux deux caractères dans le tampon d'entrée, le a et le caractère newline.

C'est pourquoi, pour tous, mais le premier, vous avez une invite fausse puisqu'elle imprime et obtient alors le newline de l'entrée standard.

scanf est vraiment une chose de compatibilité C en C ++, vous devriez utiliser cin >> something (ou any des flux Assimilés choses vraiment) pour C ++ -. Entrée de style

Ce double coup de charcaters explique aussi le total errante et depuis, lorsque vous get qui newline, vous ajoutez la valeur actuelle du coût nouveau dans votre boucle principale .

Votre total est composé de deux de chaque valeur en raison du fait que vous ajoutez cost quelle que soit la valeur saisie.

Avec votre entrée de a,b,a, qui serait 4.25 + 5.57 + 4.25 = 14.07 - a est 4.25, pas 5.24. Et 28.14 est exactement 14.07 deux fois.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top