C++ Détection de la touche ENTER enfoncée par l'utilisateur
J'ai une boucle dans laquelle je demande à l'utilisateur de saisir un nom. J'ai besoin d'arrêter lorsque l'utilisateur appuie sur la touche ENTRÉE..... ou quand 20 noms ont été inscrits. Cependant, ma méthode ne s'arrête pas lorsque l'utilisateur appuie sur la touche ENTRÉE
//loop until ENTER key is entered or 20 elements have been added
bool stop = false;
int ind = 0;
while( !stop || ind >= 20 ){
cout << "Enter name #" << (ind+1) << ":";
string temp;
getline(cin, temp);
int enterKey = atoi(temp.c_str());
if(enterKey == '\n'){
stop = true;
}
else{
names[ind] = temp;
}
ind++;
}
Vous devez vous connecter pour publier un commentaire.
Vous convertir le lire une chaîne en nombre entier avec
atoi
:Si temp est une chaîne de caractères comme
"1234"
ce sera mis enenterKey
à1234
. Puis vous comparezenterKey
à la valeur ASCII de\n
. Ce n'est probablement pas quelque chose d'utile.Aussi
std::getline
viens de lire les caractères jusqu'à, mais excluant, la prochaine'\n'
. Si un utilisateur appuie sur entrée sans avoir à taper des autres personnages,std::getline
retourne une chaîne vide. Si une chaîne est vide, peut être facilement testée avec sesempty()
méthode:getline va manger votre délimiteur, qui sera '\n', alors vous voudrez probablement être de vérifier qu'une chaîne vide. Le faire avant l'appel à atoi.
essayer:
ou:
for
boucle est le chemin à parcourir. Votre code a un bug si. Le vecteur résultant disposera de 20 chaînes vides suivie d'un certain nombre de réponses.Essayer
stop = temp.empty()
à la place.getline
ne doit pas contenir de caractères de nouvelle ligne. Une ligne vide devrait se traduire par une chaîne vide.Aussi, Charles est correct, votre condition du while est incorrect, utilisez
while( !stop && ind < 20)
. La façon dont vous l'avez écrit, l'utilisateur doit entrer les 20 valeurs, et une ligne vide. Charles " le changement, dit à la pause lorsque la condition est remplie (pas les deux).Par souci d'exhaustivité, voici le nouveau projet de code:
Personnellement, je voudrais écrire le code comme suit:
Vous souhaitez utiliser cin.get(); cin >> temp; je crois.
cin >> temp
ne fera que donner un jeton. Il est possible de l'OP veut déclarations qui contiennent des espaces.