2017-09-21 41 views
1

Mon programme continue à boucler et ne passe jamais à "return 0;". Est-ce le compilateur qui est mauvais ou le code?Mon programme continue de boucler et ne passe jamais à "return 0;". Est-ce le compilateur qui est mauvais ou le code?

#include<iostream> 
using namespace std; 

int main() { 
    string nameInput = ""; 
    string Input = "Yes"; 
    cout << "Welcome to the purple casino!" << endl << "What's your name?" << endl; 
    while(Input =="Yes" || "yes"){ 
     getline(cin, nameInput); 
     cout << nameInput << ", what a nice name!" << endl << "Do you want to change it?" << endl; 
     getline(cin, Input); 
     if(Input =="Yes" || "yes"){ 
      cout << "To what?" << endl; 
     } 
    } 
    cout << "Let's begin!"; 
    return 0; 
} 
+9

Règle générale: c'est vous, pas le compilateur! –

+0

Mis à part l'indentation dégoûtante, c'est bien demandé. – Bathsheba

+2

au moins dans 99,99% des cas, voir https://stackoverflow.com/questions/42088015/lambda-capture-and-parameter-with-same-name-who-shadows-the-other-clang-vs-g pour un contre-exemple. –

Répondre

5

L'expression Input == "Yes" || "yes" est évaluée, en raison de priorité des opérateurs, comme

(Input == "Yes") || "yes"

qui est toujours true. En effet, le const char[4] litéral "yes"se désintègre en un type const char*, avec une valeur de pointeur différente de zéro.

Vous devez Input == "Yes" || Input == "yes"

5

Mon programme maintient en boucle et ne jamais se faire « return 0; ». Est-ce le compilateur qui est mauvais ou le code?

Le code, comme (presque) toujours.

Input =="Yes" || "yes" sera toujours à évaluer true, peu importe de valeur est vraiment Input, car il revient à dire:

  • true si: Input égal à « Oui » ou « oui ».
  • false sinon,

Une chaîne littérale à evalue true, ainsi le second opérandes de logique ou sera true, ce qui provoque toute l'expression logique à evalue true, toujours! En conséquence, la condition de la boucle while est toujours vraie, ce qui entraîne une boucle infinie!

changer donc ceci:

while(Input =="Yes" || "yes") 

à ceci:

while(Input =="Yes" || Input == "yes") 

PS: Changer l'état de l'instruction if de même, car il est le même état exact.

2

état de votre déclaration while est erroné:

while (Input == "Yes" || "yes") 

comme "yes" opérande renvoie toujours true entraînant toute condition à true. Essayez ceci:

while (Input == "Yes" || Input == "yes") 
0

Il y a une erreur stupide dans votre code.S'il vous plaît voir le code modifié ci-dessous -

#include<iostream> 
using namespace std; 

int main(){ 
string nameInput = ""; 
string Input = "Yes"; 
cout << "Welcome to the purple casino!" << endl << "What's your name?" << 
endl; 
while(Input =="Yes" || Input == "yes"){ // Error was here 
getline(cin, nameInput); 
cout << nameInput << ", what a nice name!" << endl << "Do you want to    
change it?" << endl; 
getline(cin, Input); 
if(Input =="Yes" || "yes"){ 
cout << "To what?" << endl; 
} 
} 
<< "Let's begin!"; 
return 0; 
} 

Essayez de modifier while(Input =="Yes" || "yes"){ à while(Input =="Yes" || Input == "yes"){

Je pense que le problème sera résolu.

0

Salut avant essayer de retour:
cout << "Let's begin!";
et changement dans While et si votre condition: D'une façon plus générale
(Input =="Yes" || Input=="yes")

0

, si vous avez une boucle à partir de laquelle votre programme ne retourne jamais, il signifie que la condition que vous avez passée est toujours évaluée à true. Dans votre cas, en effet, une que les autres réponses déjà, la condition

while (Input == "Yes" || "yes") 

évaluer toujours vrai en raison de la deuxième partie. Qu'est-ce que vous voulez vraiment est de vérifier si l'entrée est « Oui » ou d'entrée est « oui », qui, en C++ devrait être écrit:

while (Input == "Yes" || Input == "yes"). 

Hope, cette réponse générale aidera.