2010-05-29 4 views
-1

Je ne comprends pas exactement comment utiliser une fonction qui renvoie un booléen. Je sais ce que c'est, mais je n'arrive pas à comprendre comment le faire fonctionner dans mon programme. J'essaie de dire que si ma variable "selection" est une lettre entre "A" et "I" alors elle est valide et peut continuer à la fonction suivante qui s'appelle calcExchangeAmt(amtExchanged, selection). Si c'est faux, je veux qu'il demande à l'utilisateur s'il veut répéter le programme et s'il accepte de le répéter. Je veux effacer l'écran et redémarrer la fonction principale. Comment puis-je faire fonctionner mon programme comme prévu?Problème avec les fonctions retournant bool!

Ceci est ma fonction bool:

bool isSelectionValid(char selection, char yesNo, double amtExchanged) 
{ 
    bool validData; 

    validData = true; 

    if ((selection >= 'a' && selection <= 'i') || 
     (selection >= 'A' && selection <= 'I')) 
    { 
     validData = calcExchangeAmt (amtExchanged, selection); 
    } 
    else(validData == false); 
    { 
     cout << "Do you wish to continue? (Y for Yes/N for No)"; 
     cin >> yesNo; 
    } 

    do 
    { 
     main(); 
    } 

    while ((yesNo =='y')||(yesNo == 'Y')); 
    { 
     system("cls"); 
    } 
    return 0; 
} 

Je reçois cet avertissement:

avertissement C4800: 'double': forcer la valeur à bool 'vrai' ou 'faux' (avertissement de performance)

+3

Etes-vous sûr que c'est le code exact qui génère l'erreur? Il devrait se plaindre de convertir 'int', pas 'double'. Aussi, qu'entendez-vous par 'else (validData == false);'? Si vous essayez de définir la valeur de validData sur true, cela ne le fera pas; vous comparez simplement 'validData' à' true' et ne faites rien avec le résultat. Il y a plus de problèmes avec ce code que je ne peux le faire. Peut-être devriez-vous prendre du recul et décrire ce que vous essayez d'accomplir. –

+0

en plus de marcelo: fournir le code source de calcExchangeAmt, le problème est là, très probablement son double retour que vous forcez à boolé – Anycorn

Répondre

-2

Le type de 0 n'est pas bool; vrai ou faux est bool. Il vous dit que 0 est un double, mais il le force à un type booléen.

+0

0 est faux. '0 'n'est pas double, son entier. – Anycorn

1

Une fonction booléenne doit renvoyer true ou false. Je suppose que votre avertissement est provoqué par le fait que vous déclarez validData comme bool, mais que vous lui attribuez une valeur différente (renvoyée par la fonction calcExchangeAmt). Cette valeur est convertie de son type de valeur (double) en booléen (vrai ou faux). Par conséquent, votre méthode IsSelectionValid doit renvoyer simplement true si la sélection est valide ou false si ce n'est pas le cas. Ensuite, quel que soit le code doit savoir que l'information peut procéder en conséquence.

Je ne sais pas beaucoup de C++, alors pardonnez-moi pour des problèmes de syntaxe mon code est lié à avoir, mais votre code devrait ressembler à ceci:

bool isSelectionValid(char selection) 
{ 
    return (selection >= 'a' && selection <= 'i') || (selection >= 'A' && selection <= 'I'); 
} 

void myCallingFunction(double amtExchanged, char selection) 
{ 
    bool isSelectionValid = isSelectionValid(selection); 

    if(isSelectionValid) 
    { 
    double exchangeAmt = calcExchangeAmt (amtExchanged, selection); 
    } 
    else 
    { 
    cout<<"Do you wish to continue? (Y for Yes/N for No)"; 
    cin>>yesNo; 

    if((yesNo =='y')||(yesNo == 'Y')) 
    { 
     main(); // or whatever code starts another attempt 
    } 
} 
0

Ce code est sérieusement confus et très non C++ aime. On s'attend normalement à ce que main() soit la fonction qui commande les choses et appelle d'autres fonctions, pour ne pas l'appeler depuis un autre endroit. Nous évitons généralement do à moins qu'il y ait une raison impérieuse (et je ne vois pas ici). Je pense qu'il est hautement improbable qu'une fonction appelée calcExchangeAmt renvoie true ou false; Je suppose qu'il retourne un nombre que vous devriez faire quelque chose d'autre (montrant à l'utilisateur?). Avec tout cela, essayer d'expliquer vos messages d'erreur du compilateur est d'une valeur limitée. Votre code est tout à l'envers et à l'envers. La réponse d'Anna Lear semble être un meilleur point de départ si cela a du sens pour vous.

+0

L'appel ':: main()' n'est pas seulement inhabituel, c'est interdit dans 3.6.1p3. (Bien sûr, cela pourrait être un membre de la classe nommé 'main', c'est autorisé) –

Questions connexes