0Pricing
C++ Academy · Leçon

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

  1. Bien utiliser std::cin et std::cout
  2. Formater la sortie avec iomanip
  3. Lire les entrées en toute sécurité avec getline
  4. Utiliser std::cerr et std::clog
← Retour à C++ Academy