Quand doit-on utiliser std::cin.getline()
? Qu'est-ce qui diffère de std::cin
?
Dans le cas avec char *, std::cin.getline
obtenir la ligne, au lieu de std::cin
obtenir le premier mot.
Prenons std::cin.getline()
à part. Tout d'abord, il y a std::
. Il s'agit de l'espace de noms dans lequel réside la bibliothèque standard. Il a des centaines de types, de fonctions et d'objets.
std::cin
Est un tel objet. Il s'agit de l'objet d'entrée de caractères standard, défini dans <iostream>
. Il a ses propres méthodes, mais vous pouvez également l'utiliser avec de nombreuses fonctions gratuites. La plupart de ces méthodes et fonctions sont des moyens d'obtenir un ou plusieurs caractères de l'entrée standard.
Enfin, .getline()
est l'une de ces méthodes de std::cin
(Et d'autres objets similaires). Vous lui dites combien de caractères il doit obtenir de l'objet sur son côté gauche (std::cin
Ici), et où mettre ces caractères. Le nombre précis de caractères peut varier: .getline()
s'arrêtera dans trois cas: 1. La fin d'une ligne est atteinte 2. Il ne reste aucun caractère dans l'entrée (ne se produit pas normalement sur std::cin
Que vous pouvez continuer à taper) 3. Le nombre maximum de caractères est lu.
Il existe d'autres méthodes et fonctions qui peuvent être utilisées avec l'objet std::cin
, Par exemple.
std::string s;
int i;
std::cin >> s; // Read a single Word from std::cin
std::cin >> i; // Read a single number from std::cin
std::getline(std::cin, s); // Read an entire line (up to \n) from std::cin
std::cin.ignore(100); // Ignore the next 100 characters of std::cin
Avez-vous lu de la documentation (par exemple http://www.cplusplus.com/reference/string/getline/ )?
Fondamentalement, std::cin
(Ou plus généralement, tout std::istream
) Est utilisé directement afin d'obtenir une entrée formatée, par ex. int x; std::cin >> x;
. std::cin.getline()
est utilisé simplement pour remplir un tampon brut char *
.
Comme d'autres ont déjà répondu (encore mieux) en gros, utilisez getline()
pour lire une ligne entière (c'est-à-dire une chaîne se terminant par \n
) Et cin>>var
Pour lire un nombre compatible avec le type de var
(entier, flottant, double etc.) ou un seul mot.
Dans cette réponse, je veux souligner un problème qui se pose lors du mélange des deux méthodes. Quand vous faites:
int a;
string s;
cin>>a;
getline(cin, s)
cin
laisse une fin de ligne, \n
, caractère qui est ensuite lu par getline();
. Il est possible de résoudre ce problème en utilisant cin.ignore()
.
int a;
string s;
cin>>a;
cin.ignore();
getline(cin, s)