2010-10-14 12 views
0

J'ai un problème, mais je n'arrive pas à comprendre ce que je fais de mal. Je ne suis pas sûr si c'est un problème avec ma boucle, ou le tampon cin n'est pas nettoyé. Je fais un programme qui transforme une chaîne de style C en majuscule, cependant si l'utilisateur entre plus de 11 caractères, alors la fonction devrait seulement afficher les 11 premiers, et rien après cela ne devrait pas être affiché. Le problème est que si je entrer plus de 11 caractères, alors ma boucle ne s'arrête jamais et continue à dire à l'utilisateur que la réponse entrée est invalide et s'il aimerait entrer une nouvelle chaîne.Problème de boucle. Cin C++ getline clear buffer

Répondre

0

Le problème vient lorsque vous essayez d'effacer votre tampon. Lorsque vous revenez de cStringToUpper, il y a encore des caractères supplémentaires dans votre tampon, mais vous recherchez immédiatement y/q.

0

Vous donnez à la ligne cin.getline un tampon de 12 caractères de sorte que le nombre de caractères requis ne sera que de quelques caractères, le reste étant toujours dans le tampon. Si vous utilisez à la place

string str; 
cin.getline(str) 

Ensuite, vous obtiendrez la ligne entière, alors vous pouvez recadrer à 11 caractères. Pas 100% sur la cin-syntaxe mais vous avez l'idée.

Ou déplacer la partie au-dessus de ne pas tenir compte

cin >>cont; 

d'ignorer les caractères supplémentaires de cette façon.

0
cin >> cont; 
cout << "\n" << endl; 
cin.ignore(200,'\n'); 

devrait être

cin.ignore(200,'\n'); 
cin >> cont; 
cout << "\n" << endl; 
0

Vous pouvez corriger votre programme en modifiant votre cStringToUpper fn. quelque chose comme:

...  
int loopCount; 
char buffer[256]; 
cin.getline(buffer,256); 
strncpy(letters, buffer, 11); 
//letters[11]= '\0'; 
cout << "\n" << endl; 
...