2017-08-03 1 views
-3

Je suis un débutant (j'ai commencé à apprendre le codage il y a 2 semaines) et j'apprécierais vraiment de vous aider à expliquer pourquoi mon code ne fonctionne pas. J'ai écrit un code simple pour calculer la probabilité. Ce n'est pas une partie vraiment importante. Le code nécessite une entrée de l'utilisateur afin de le rendre un peu infaillible, j'ai écrit deux instructions if pour différents types de mauvaises entrées (mauvais type de données, nombre trop élevé, nombre trop bas) pour lancer un message d'erreur et tuer le programme. Et si l'entrée est correcte (signifie qu'aucune des conditions des instructions if n'est vraie), elle doit appeler une fonction diceTwo (des). Cependant, si je saisis le numéro 8 - qui devrait être correct - pour une raison que je ne comprends pas - il déclenche le numéro trop haut/bas if, donc quel que soit le numéro entré, la fonction n'est jamais appelée.C++ Si la déclaration se comporte mal

cin >> des; 

if (cin.fail()) 
{ 
    cin.clear(); 
    cin.ignore(100, '\n'); 
    cout << "Invalid input! Use only whole positive numbers!" << endl; 
    cout << "Try again." << endl; 

    return -1; 
} 

if (des> 12 || des< 1); 
{ 
    cout << "Invalid input!" << endl; 
    cout << "Remember the only possible values are from 2 to 12!" << endl; 
    cout << "Try again." << endl; 

    return -1; 
} 

diceTwo(des); 

cout << "The probability of this roll is " << x << "%" << endl; 

C'est la partie qui pose problème. J'ai déjà essayé de diviser l'instruction if problématique en deux (une pour < 1, une pour> 12), ou en ajoutant une nouvelle instruction if pour des> 1 & & des < 12 pour appeler la fonction, rien de tout cela n'a fonctionné. J'ai travaillé avec des instructions if pour assurer l'infaillibilité de l'entrée de l'utilisateur quelques fois auparavant, toujours bien travaillé, donc je ne peux vraiment pas trouver ce qui ne va pas cette fois. Quelqu'un pourrait me dire comment le réparer s'il vous plaît?

+1

Vous savez que '' n'' n'est pas la même chose que ''\ n'', n'est-ce pas? –

+0

Nous avons besoin de suffisamment de code pour reproduire le problème. Nous ne pouvons même pas dire si 'des' est un' int', un 'float', un' std :: string', ou quoi. –

+0

@SamVarshavchik Oui, bien sûr, désolé, mon mauvais, je supprimais certaines parties de phrases de cout (y compris \ n) pour simplifier le code que je mettais ici, et probablement supprimé le '\' par erreur. Dans mon code d'origine c'est '\ n'. Je vais l'éditer ici. – InsaneNewbie

Répondre

3

Vous avez un point-virgule après l'instruction if. Regardez attentivement:

if (des> 12 || des< 1); //<----- semi colon 
{ 
    cout << "Invalid input!" << endl; 
    cout << "Remember the only possible values are from 2 to 12!" << endl; 
    cout << "Try again." << endl; 

    return -1; 
} 

Le colon demi termine l'instruction if, de sorte que votre programme continue juste à la ligne suivante, qui se trouve être votre ligne d'entrée non valide. Retirez le point-virgule et vous êtes en or :)

+0

Et votre compilateur aurait dû vous donner un avertissement. Si ce n'est pas le cas, vous êtes soit en train d'en faire un mauvais usage, soit c'est un gros morceau d'ordure. –

+0

vrai! il faut faire attention, parfois votre compilateur n'est pas omniscient – travisjayday

+0

Oh mon dieu merci! Je savais que ce serait quelque chose de minuscule et de stupide qui me manquait mais pas CE minuscule et stupide: D Merci encore. Et @DavidSchwartz non, malheureusement mon compilateur ne m'a pas prévenu. J'utilise Code :: Blocks avec le compilateur GNU GCC par défaut. Est-ce merdique? Rien de mieux que tu pourrais me recommander? – InsaneNewbie

2

Ajouté par erreur; dans si

if (des> 12 || des< 1);