getline() sauter en premier, même après clear()
Donc, j'ai une fonction qui fait des sauts au cours de la première getline et directement à la seconde. J'ai essayé d'effacer la mémoire tampon, mais toujours pas de chance, ce qu'il se passe?
void getData(char* strA, char* strB)
{
cout << "Enter String 1: "; //Shows this line
cin.clear();
cin.getline(strA, 50); //50 is the character limit, Skipping Input
cout << endl << "Enter String 2: "; //Showing This Line
cin.clear();
cin.getline(strB, 50); //Jumps Straight to this line
}
Est votre console de moins de 50 caractères ? Valeur par défaut est 80 je pense
OriginalL'auteur Derp | 2012-08-29
Vous devez vous connecter pour publier un commentaire.
Assurez-vous de ne pas utiliser
cin >> str
. avant d'appeler la fonction. Si vous utilisezcin >> str
et que vous souhaitez utilisergetline(cin, str)
, vous devez appelercin.ignore()
avant.Dans le cas de l'utilisation de c-strings:
AJOUTER: Votre mal n'est probablement pas dans la fonction elle-même, mais plutôt avant l'appel de la fonction. Le flux
cin
lire uniquement un caractère de nouvelle ligne\n'
en premiercin.getline
.OriginalL'auteur
cin.clear();
efface les bits d'erreur sur le stream - il ne consomme pas de toutes les données qui peuvent être en attente.Vous souhaitez utiliser
cin.ignore()
de consommer des données dans le flux.OriginalL'auteur Michael Burr
Après avoir lu quelque chose là-bas est toujours le 'RETOUR' de caractères à l'intérieur de bufor de sorte que vous avez à
cin.ignore()
après chaque lecture.Vous pouvez également utiliser
cin.sync()
pour effacer le flux.Effectivement méthode clear efface uniquement les drapeaux.
Il y a aussi l'option que vous pouvez aller à la fin de stream, qui n'a plus rien à lire, vous devez écrire sans problèmes.
C'est à vous qu'allez-vous l'utiliser.
OriginalL'auteur Krzychu8
utilisation
cin.ignore(-1);
Il ne sera pas supprimer le premier caractère de la chaîne d'entréeOriginalL'auteur Sukeshini