web-dev-qa-db-fra.com

différence entre cin.get () et cin.getline ()

Je suis nouveau en programmation et j'ai quelques questions sur les fonctions get() et getline() en C++.

Ma compréhension pour les deux fonctions:

La fonction getline() lit une ligne entière et utilise le caractère de nouvelle ligne transmis par la touche Entrée pour marquer la fin de la saisie. La fonction get() ressemble beaucoup à getline(), mais plutôt que de lire et de supprimer le caractère de nouvelle ligne, get() laisse ce caractère dans la file d'attente d'entrée.

Le livre (C++ Primer Plus) que je suis en train de lire suggère d'utiliser get() sur getline(). Ma confusion est que ce n'est pas getline() plus sûr que get() puisqu'il veille à terminer la ligne avec '\n'. Par ailleurs, get() ne fera que suspendre le caractère dans la file d’entrée, causant ainsi potentiellement un problème? 

6
Yu Zhou

Il existe un nombre équivalent d'avantages et d'inconvénients, et tout dépend fondamentalement de ce que vous lisez: get() laisse le délimiteur dans la file d'attente, vous permettant ainsi de le prendre en compte dans la prochaine entrée. getline() la jette, donc la prochaine entrée sera juste après.

Si vous parlez du caractère de nouvelle ligne d'une entrée de console, il est parfaitement logique de le supprimer, mais si nous considérons une entrée d'un fichier, vous pouvez utiliser comme "délimiteur" le début du champ suivant.

Ce qui est "bon" ou "sûr" à faire dépend de ce que vous faites.

13
Emilio Garavaglia

get() extrait char par caractère d'un flux et renvoie sa valeur (convertie en un entier), alors que getline() est utilisé pour obtenir une ligne d'un fichier ligne par ligne. En règle générale, getline est utilisé pour filtrer les délimiteurs dans les applications où vous avez un fichier plat (avec des milliers de lignes) et souhaitez extraire la sortie (ligne par ligne) à l'aide de certains délimiteurs, puis effectuez quelques opérations dessus.

6
Shubham Aggarwal