web-dev-qa-db-fra.com

std :: cin.getline () contre std :: cin

Quand doit-on utiliser std::cin.getline()? Qu'est-ce qui diffère de std::cin?

30
Simplicity

Dans le cas avec char *, std::cin.getline obtenir la ligne, au lieu de std::cin obtenir le premier mot.

20
alvelcom

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
33
MSalters

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 *.

9
Oliver Charlesworth

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)
0
Francesco Boi