Namespaces
Variants

std:: getline

From cppreference.net
std::basic_string
Défini dans l'en-tête <string>
template < class CharT, class Traits, class Allocator >

std:: basic_istream < CharT, Traits > &
getline ( std:: basic_istream < CharT, Traits > & input,

std:: basic_string < CharT, Traits, Allocator > & str, CharT delim ) ;
(1)
template < class CharT, class Traits, class Allocator >

std:: basic_istream < CharT, Traits > &
getline ( std:: basic_istream < CharT, Traits > && input,

std:: basic_string < CharT, Traits, Allocator > & str, CharT delim ) ;
(2) (depuis C++11)
template < class CharT, class Traits, class Allocator >

std:: basic_istream < CharT, Traits > &
getline ( std:: basic_istream < CharT, Traits > & input,

std:: basic_string < CharT, Traits, Allocator > & str ) ;
(3)
template < class CharT, class Traits, class Allocator >

std:: basic_istream < CharT, Traits > &
getline ( std:: basic_istream < CharT, Traits > && input,

std:: basic_string < CharT, Traits, Allocator > & str ) ;
(4) (depuis C++11)

getline lit les caractères d'un flux d'entrée et les place dans une chaîne :

1,2) Se comporte comme UnformattedInputFunction , sauf que input. gcount ( ) n'est pas affecté. Après avoir construit et vérifié l'objet sentinelle, effectue les opérations suivantes :
1) Appelle str. erase ( ) .
2) Extrait les caractères de input et les ajoute à str jusqu'à ce que l'une des conditions suivantes se produise (vérifiées dans l'ordre indiqué)
a) condition de fin de fichier sur input , auquel cas getline positionne eofbit .
b) le prochain caractère d'entrée disponible est delim , tel que testé par Traits :: eq ( c, delim ) , auquel cas le caractère délimiteur est extrait de input , mais n'est pas ajouté à str .
c) str. max_size ( ) caractères ont été stockés, auquel cas getline positionne failbit et retourne.
3) Si aucun caractère n'a été extrait pour quelque raison que ce soit (pas même le délimiteur ignoré), getline positionne failbit et retourne.
3,4) Identique à getline ( input, str, input. widen ( ' \n ' ) ) , c'est-à-dire que le délimiteur par défaut est le caractère de fin de ligne.

Table des matières

Paramètres

input - le flux depuis lequel obtenir les données
str - la chaîne dans laquelle placer les données
delim - le caractère délimiteur

Valeur de retour

input

Notes

Lors de la consommation d'entrées délimitées par des espaces blancs (par ex. int n ; std:: cin >> n ; ) tout espace blanc qui suit, y compris un caractère de nouvelle ligne, restera dans le flux d'entrée. Ensuite, lors du passage à une entrée orientée ligne, la première ligne récupérée avec getline sera précisément cet espace blanc. Dans le cas probable où ce comportement n'est pas souhaité, les solutions possibles incluent :

Exemple

L'exemple suivant démontre comment utiliser la fonction getline pour lire l'entrée utilisateur, et traiter un flux ligne par ligne, ou par parties d'une ligne en utilisant le paramètre delim .

#include <iostream>
#include <sstream>
#include <string>
int main()
{
    // saluer l'utilisateur
    std::string name;
    std::cout << "What is your name? ";
    std::getline(std::cin, name);
    std::cout << "Hello " << name << ", nice to meet you.\n";
    // lire un fichier ligne par ligne
    std::istringstream input;
    input.str("1\n2\n3\n4\n5\n6\n7\n");
    int sum = 0;
    for (std::string line; std::getline(input, line);)
        sum += std::stoi(line);
    std::cout << "\nThe sum is " << sum << ".\n\n";
    // utiliser un séparateur pour lire des parties de la ligne
    std::istringstream input2;
    input2.str("a;b;c;d");
    for (std::string line; std::getline(input2, line, ';');)
        std::cout << line << '\n';
}

Sortie possible :

What is your name? John Q. Public
Hello John Q. Public, nice to meet you.
The sum is 28.
a
b
c
d

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Applicable à Comportement publié Comportement corrigé
LWG 91 C++98 getline ne se comportait pas comme une fonction de saisie non formatée se comporte comme une fonction de saisie non formatée

Voir aussi

extrait des caractères jusqu'à ce que le caractère donné soit trouvé
(fonction membre publique de std::basic_istream<CharT,Traits> )