C ++ si la condition n’est pas vérifiée après la lecture

Je travaille sur un jeu simple (ce n’est pas tout le code, mais le problème avec lequel j’ai des problèmes) et j’ai rencontré ce problème; Une fois que la condition est remplie, elle revient au début et me propose de ressaisir la chaîne. Cependant, quoi que je sais, je reçois juste «Non valide» . Quelqu’un sait-il pourquoi? J’utilise le compilateur GNU C ++ .

#include  #include  using namespace std; int main() { ssortingng command; mainscreen: cout << "blab"; getlinething: cin.ignore(); getline(cin, command); if (command == "task") { goto mainscreen; } else { cout << "Not valid."; goto getlinething; } return 0; } 

Lorsque je lance votre code avec une impression de débogage, cela indique que chaque fois que vous lisez une nouvelle commande, vous perdez le premier caractère de la chaîne. En fait, lorsque je supprime votre cin.ignore (), cela fonctionne bien. Aussi, jetez un coup d’œil à cela pour voir si cela répond à vos besoins:

 cout << "blab"; while(1){ getline(cin, command); if(command == "task"){ cout << "blab"; getline(cin, command); } else{ cout << "Not valid."; } } 

Au moins pour le débogage, pourquoi ne pas faire

 cout << "'" << command << "' Not valid" << endl ; 

Bon, je l’ai testé. Sans cin.ignore (), je ne peux absolument pas saisir les données dans la chaîne. La première fois que j’entre, tout capte. Donc, si j’écrivais tâche, la chaîne dirait ‘tâche’, mais la deuxième fois que je l’aurais entrée, elle dirait ‘demander’. Je ne sais pas vraiment pourquoi il fait ça.

La ligne cin.ignore() toujours un caractère par défaut (sauf si elle rencontre EOF , ce qui constituerait un acte assez délibéré sur cin ).

Supposons donc que l’utilisateur entre la task , puis appuie sur la touche Entrée. cin.ignore() éliminera le 't' et la chaîne de command contiendra "ask" . Si vous souhaitez obtenir une correspondance, la première fois, l’utilisateur devra entrer ttask . La nouvelle ligne sera supprimée, dans les deux cas. La même chose se produira jusqu’à ce qu’une correspondance soit trouvée.