Namespaces
Variants

std::getline

Depuis fr.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 des caractères depuis un flux d'entrée et les place dans une chaîne :

1,2) Se comporte comme une Fonction d'entrée non formatée, sauf que input.gcount() n'est pas affecté. Après avoir construit et vérifié l'objet sentinelle, effectue ce qui suit :
1) Appelle str.erase().
2) Extrait des caractères de input et les ajoute à str jusqu'à ce que l'une des conditions suivantes se produise (vérifiée 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, comme 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() des 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 (même pas 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 nouvelle ligne.

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> )