Lire les entrées en toute sécurité avec getline
Utiliser std::getline pour lire une ligne et valider l’entrée de l’utilisateur avant de l’utiliser
Lire les entrées en toute sécurité avec getline est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.
Pourquoi une saisie sûre est importante
La saisie utilisateur est la source la plus fréquente de plantages. Un type incorrect, une ligne vide ou des caractères inattendus peuvent tous perturber un programme naïf. Une lecture défensive est essentielle.
Principes de std::getline
std::getline(stream, line) lit les caractères jusqu'au prochain saut de ligne. Le saut de ligne est consommé, mais pas stocké.
std::string line;
std::getline(std::cin, line);Délimiteurs personnalisés
Transmettez un troisième argument pour arrêter la lecture sur n'importe quel caractère, et pas seulement sur un saut de ligne.
std::string field;
std::getline(std::cin, field, ',');Valider une saisie numérique
Lisez d'abord toute la ligne, puis analysez-la. Vous évitez ainsi l'état d'échec de cin lorsque la saisie est mal formée.
std::string line;
int n;
if (std::getline(std::cin, line)) {
try {
n = std::stoi(line);
} catch (...) {
std::cout << "Invalid number\n";
}
}Boucler jusqu'à obtenir une valeur valide
Combinez getline et try/catch pour continuer à demander une valeur jusqu'à ce que l'utilisateur fournisse une saisie valide.
int age;
while (true) {
std::cout << "Age: ";
std::string line;
std::getline(std::cin, line);
try {
age = std::stoi(line);
if (age >= 0 && age < 150) break;
} catch (...) {}
std::cout << "Try again.\n";
}Détecter EOF avec getline
getline place le flux dans l'état d'échec lorsqu'il atteint EOF. Vérifiez le flux après l'appel.
std::string line;
while (std::getline(std::cin, line)) {
process(line);
}Supprimer les espaces superflus
Les utilisateurs ajoutent souvent des espaces parasites. Supprimez les espaces aux deux extrémités après la lecture.
void trim(std::string& s) {
size_t start = s.find_first_not_of(" \t\r\n");
size_t end = s.find_last_not_of(" \t\r\n");
s = (start == std::string::npos) ? "" : s.substr(start, end - start + 1);
}Vider le flux
Si vous mélangez >> et getline, supprimez d'abord les caractères résiduels.
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');Lire plusieurs valeurs par ligne
Lisez toute la ligne, puis transmettez-la à un stringstream et extrayez les valeurs.
std::string line;
std::getline(std::cin, line);
std::istringstream iss(line);
int a, b, c;
iss >> a >> b >> c;Se protéger contre les longueurs maximales
Rejetez rapidement les saisies trop longues pour éviter un épuisement involontaire des ressources.
std::string line;
if (std::getline(std::cin, line) && line.size() > 1024) {
std::cout << "Input too long.\n";
return 1;
}Lire des mots de passe ou une saisie masquée
La bibliothèque standard ne masque pas les caractères saisis à l'écran. Utilisez des API propres à la plateforme, comme termios sous Unix ou SetConsoleMode sous Windows, pour les invites de mot de passe.
Vérification rapide
Pourquoi est-il plus sûr de lire avec getline puis d'analyser, plutôt que d'utiliser std::cin >> n ?
Récapitulatif
Lisez la saisie utilisateur avec std::getline, validez-la ou analysez-la séparément, puis supprimez les espaces superflus. Encapsulez l'analyse dans try/catch et bouclez jusqu'à obtenir une valeur valide. Videz le flux lorsque vous mélangez l'extraction et la lecture de lignes.
Questions Fréquemment Posées
La leçon « Lire les entrées en toute sécurité avec getline » est-elle gratuite ?
Oui — le texte complet de « Lire les entrées en toute sécurité avec getline » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Lire les entrées en toute sécurité avec getline » ?
Utiliser std::getline pour lire une ligne et valider l’entrée de l’utilisateur avant de l’utiliser Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C++ Academy ?
Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Lire les entrées en toute sécurité avec getline » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?
Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Bien utiliser std::cin et std::cout
- Formater la sortie avec iomanip
- Lire les entrées en toute sécurité avec getline
- Utiliser std::cerr et std::clog