std:: getline
|
Défini dans l'en-tête
<string>
|
||
|
template
<
class
CharT,
class
Traits,
class
Allocator
>
std::
basic_istream
<
CharT, Traits
>
&
|
(1) | |
|
template
<
class
CharT,
class
Traits,
class
Allocator
>
std::
basic_istream
<
CharT, Traits
>
&
|
(2) | (depuis C++11) |
|
template
<
class
CharT,
class
Traits,
class
Allocator
>
std::
basic_istream
<
CharT, Traits
>
&
|
(3) | |
|
template
<
class
CharT,
class
Traits,
class
Allocator
>
std::
basic_istream
<
CharT, Traits
>
&
|
(4) | (depuis C++11) |
getline
lit les caractères d'un flux d'entrée et les place dans une chaîne :
getline
positionne
failbit
et retourne.
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 :
-
Un appel initial explicite superflu à
getline. - Suppression des espaces blancs consécutifs avec std:: cin >> std:: ws .
- Ignorer tous les caractères restants sur la ligne d'entrée avec cin. ignore ( std:: numeric_limits < std:: streamsize > :: max ( ) , ' \n ' ) ; .
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>
)
|