2012-07-26 5 views
0

Le code C++ suivant:Si la déclaration ne fonctionne pas comment je veux qu'il

if (a != '0.5' || a != '0.6') 
{ 
    cout << "The answer is neither 0.5 nor 0.6 " << '\n'; 
} 

J'ai aussi essayé

if ((a != '0.5') || (a != '0.6')) 
{ 
    cout << "The answer is neither 0.5 nor 0.6 " << '\n'; 
} 

et essayé

if (!(a== '0.5') || !(a==0.6) 
{ 
    cout << "The answer is neither 0.5 nor 0.6 " << '\n'; 
} 

reçoit un numéro d'un utilisateur et vérifie si le nombre est de 0,5 ou 0,6; si c'est le cas, il devrait s'exécuter comme une fausse instruction, mais s'il s'agit d'un autre nombre, il devrait être exécuté comme vrai. Cependant, il continue à s'exécuter comme vrai bien qu'il devrait exécuter comme faux quand j'entre 0.5 ou 0.6. Ceci est différent lorsque j'utilise une autre instruction if dans laquelle il fonctionne très bien qui est:

if (a != 0.5) 
{ 
    //what to do if true. 
} 
else if (a != 0.6) 
{ 
    //What to do if this is true and the first id wrong. 
} 
else 
{ 
    //What to do if none are true. 
} 

Pourquoi ne peut pas exécuter le = dans l'instruction if?

+0

D'accord, je ne voulais pas le code pour finir par comme ça. – urbanslug

+0

ok comment utiliser l'instruction if (a! = 'X' | a! = 'Y') {} est tout ce que je veux savoir. Sans le 0 s'il vous plaît – urbanslug

Répondre

0

enlever les guillemets simples de 0,5 et 0,6 et vous devez utiliser & & (ET) ne || (OR) à savoir: if (a != 0.5 && a != 0.6)

0

Il doit être

if (a != 0.5 && a != 0.6) 
+1

Pourquoi est-ce que cela est upvoted quand '0.5' et '0.6' est clairement faux ... – Marlon

2

un est censé être un flotteur ou une chaîne? Dans les deux cas, cette syntaxe est fausse '0.5', si c'est une chaîne, utilisez des guillemets doubles. Ne pas comparer avec float/double pour (in) l'égalité, à cause de la représentation interne cela ne fonctionnera pas comme prévu, voir how-to-correctly-and-standardly-compare-floats.

+0

Je l'ai essayé en premier sans les guillemets et il a échoué. – urbanslug

+0

@MosesMwaniki mais est-ce censé être un nombre à virgule flottante ou un littéral de chaîne? – juanchopanza

3

La logique est incorrecte. Vous êtes en train de vérifier si un nombre n'est pas 0.5 ou pas 0.6 en même temps; tous les nombres réussiront ce test. Vous devez remplacer la logique ou (||) avec une logique et (&&).

De même, vous devez supprimer les guillemets simples des nombres sinon vous créez un littéral multicharacters qui a une valeur définie par l'implémentation.

if (a != 0.5 && a != 0.6) 
{ 
    cout << "The answer is neither 0.5 nor 0.6 " << '\n'; 
} 
0

Si a est char alors des choses étranges se produisent lorsque vous somthing comme:

char a = '0.5'; 
cout << "A: " a << endl; 

Affichera (sur mon compilateur, ne peux pas être sûr de tous les autres):

A: 5 

Et:

char a = '0.5'; 
if (a == '5') 
    cout << "yey" << endl; 
else 
    cout << "oops" << endl; 

Affichera:

yey 

Mais je pense que ce comportement est indéfini (je ne sais pas pour sûr). En tout cas, cela ne fera pas ce que vous semblez vouloir.

Deuxièmement, je pense que votre logique est erroné:

Vous dites:

Sinon 0.5 OU pas 0.6

Où je pense que vous voulez dire

Sinon 0.5 et non 0.6

if (a != '0.5' && a != '0.6') 
1

Quel est le type de un?

std :: string

on suppose que:

std::string a; 
std::cin >> a; 

puis le code suivant fonctionne:

if (a == "0.5" || a == "0.6") 
{ 
    // Do something when it's true 
} 
else 
{ 
    // Do something when it's false 
} 

Bien que "0,5" et "0,6" sont const char *, ils va convertir en std :: string, donc ça marche bien.

const char *

char a[BUFSIZE]; 
std::cin >> a; 
if (strcmp(a, "0.5") == 0 || strcmp(a, "0.6") == 0) 
{ 
    // Do something when it's true 
} 
else 
{ 
    // Do something when it's false 
} 

Vous pouvez utiliser strcmp pour comparer chaîne c style

flotteur/deux

Lorsque vous comparez flotteurs, vous pouvez rencontrer des problèmes de précision. Vous pouvez écrire des fonctions ou une classe Float pour résoudre le problème. Comme ceci:

const double EPS = 1e-8; 
inline bool FloatEqual(const double lhs, const double rhs) 
{ return std::fabs(rhs-lhs) <= EPS; } 
int main() 
{ 
    double a; 
    std::cin >> a; 
    if (FloatEqual(a, 0.5) || FloatEqual(a, 0.6)) 
    { 
    // Do something when it's true 
    } 
    else 
    { 
    // Do something when it's false 
    } 
} 

Par ailleurs

Il est intéressant de constater que les énoncés suivants sont égaux

if (a == "0.5" || a == "0.6") 
if (!(a != "0.5" && a != "0.6")) 
Questions connexes