2017-10-05 4 views
-1

EDIT: La réponse de la question est que == est utilisé pour la comparaison, mon test if utilisé =SOLVED C++: Ne pas reconnaître la valeur char quand evaulating instruction if

Je recherchais pendant un certain temps, et demandé à mon professeur, mais ni de nous sommes sûrs exactement ce qui se passe. Cela signifie probablement qu'il est une faute de frappe quelque part, mais chaque fois que je lance ce code, pour une raison quelconque, il appelle toutes les fonctions indépendamment du fait que la déclaration if évalue true

int main() 
{ 
char StartUnit, EndUnit; 
    double StartVal = 0, EndVal = 0; 
    double CalcVal = 0; 
    static double result = 0;` 

` //Receive user input` 

` cout << "Please enter the unit which you would like to convert from: "; 
    cin >> StartUnit; 
    cout << "What is your initial value?: "; 
    cin >> StartVal; 
    cout << "Please enter the unit which you would like to convert to: "; 
    cin >> EndUnit; 

    `//Step 1: Convert input to celsius` 

    `if (StartUnit = 'f') 
    { 
    CalcVal = FarCel(StartVal); 
    }` 

    `if (StartUnit = 'k') 
    { 
    CalcVal = KelCel(StartVal); 
    }` 

    `if (StartUnit = 'r') 
    { 
    CalcVal = RakCel(StartVal); 
    }` 

    //Step 2: Conver celsius to desired value 

    cout << CalcVal; 


    return 0; 
} 
` 

Quand je sortie CalcVal, peu importe quoi, il semble courir à travers les trois fonctions. Peu importe ce que je tape, r, c, f, ils évaulent tous la même chose. Pourrais-je avoir un conseil sur où je vais mal?

Les citations aléatoires épars étaient d'avant j'ai lu sur CTRL + K

+5

Si votre professeur ne pouvait pas repérer immédiatement le bug évident, et une explication, comme vous l'avez prétendu, vous avez vraiment besoin de trouver un nouveau professeur. Celui que vous avez est complètement incompétent. –

+1

Augmentez le niveau d'avertissement de votre compilateur et les chances sont bonnes, il criera meurtrier bleu sang sur vous pour le ==/= mélanger. Niveau 4 dans Visual Studio et en ajoutant -Wall -Wextra à la ligne de commande g ++ devrait faire le travail. – user4581301

+1

cette question a une réponse, veuillez en choisir une en tant que réponse acceptable. – Lamar

Répondre

1

Parce que vous semblez attribuer les valeurs (=), au lieu de les vérifier (==). Aussi, vous devriez utiliser else if blocs, pour une meilleure lecture.

+1

Voilà ce que c'était - merci beaucoup! Supervision facile, débutant. Et apparemment mon professeur est aussi: P – plshelpTriangles

0

Toutes vos instructions if ASSING (=), plutôt que comparant (==).

Alors, changer ceci:

if (StartUnit = 'f') 

à ceci:

if (StartUnit == 'f') 

et agir similaire pour le reste des instructions if.

0

Il y a trois caractéristiques de C++ qui se combinent pour produire ce problème:

  1. En C, C++, et beaucoup la langue associée, il y a une différence entre = (un seul signe égal) et == (deux est égal à des signes ensemble). Le premier est une affectation, le second est une comparaison. StartUnit = 'f' signifie "Définir StartUnit à la valeur 'f'"; vous vouliez utiliser StartUnit == 'f'.
  2. Dans beaucoup de langues, l'affectation est en fait une expression et a également une valeur. Dans ce cas, c'est la valeur affectée, donc StartUnit = 'f' signifie "Set StartUnit to f, et retourne également la valeur 'f'". Comme il est dans une instruction if, cela définit à la fois StartUnit et if ('f').
  3. Lorsqu'une instruction if ou une autre opération booléenne regarde int, float, char, etc., elle vérifie si elles sont non nulles. Puisque 'f' n'est pas l'octet Nul '\x00' (et aucun n'est '0'), il est évalué comme vrai et le corps d'instruction if est exécuté.

Puisque toutes ces instructions if fonctionnent de la même manière, cela se produit pour toutes et toutes les fonctions sont exécutées.


Vous pouvez également utiliser else clauses, ou même une déclaration switch. Un tas de if déclarations, l'un après l'autre, ressemble à aucun, aucun, ou tous d'entre eux pourraient fonctionner. Puisque vous en voulez un et un seul, vous devez utiliser des blocs else ou une instruction switch.