Maison > développement back-end > C++ > Pourquoi « getline » ne demande-t-il pas de saisie en C ?

Pourquoi « getline » ne demande-t-il pas de saisie en C ?

Barbara Streisand
Libérer: 2024-11-29 14:14:14
original
473 Les gens l'ont consulté

Why Doesn't `getline` Prompt for Input in C  ?

getline ne demande pas de saisie : un cas de problèmes de tampon

Lors de l'utilisation de getline(cin, mystr) en C , vous pouvez rencontrer un problème où il ne demande pas de saisie à l'utilisateur et attribue à la place la valeur initiale de "0" à la variable de prix. En effet, getline lit l'entrée jusqu'à ce qu'elle rencontre un caractère de nouvelle ligne (« n »), et il peut y avoir un caractère de nouvelle ligne persistant dans le tampon d'entrée.

Le problème survient lors du mélange d'opérateurs de flux d'entrée tels que >> avec getline. Lorsque vous utilisez cin >> i pour lire un entier, la saisie de l'utilisateur est suivie d'un caractère de nouvelle ligne. Cependant, cette nouvelle ligne reste dans le tampon d'entrée. Lorsque vous appelez ensuite getline, il interprète le caractère de nouvelle ligne comme entrée, sans inviter l'utilisateur.

Solutions possibles :

  • Ignorer le caractère de nouvelle ligne : Avant d'appeler getline, utilisez cin.ignore() pour supprimer le caractère de nouvelle ligne du tampon d'entrée. Par exemple :
cin.ignore();
getline(cin, mystr);
Copier après la connexion
  • Utiliser des fonctions de saisie personnalisées : Écrivez une fonction qui lit l'entrée sous forme de chaîne et la convertit dans le type de données souhaité, en gérant les caractères de nouvelle ligne. de manière appropriée. Par exemple :
int getInt() {
  string input;
  getline(cin, input);
  return stoi(input);
}
Copier après la connexion
  • Éviter >> pour l'entrée : Utilisez getline exclusivement pour l'entrée et convertissez la chaîne dans le type de données souhaité. Cette approche augmente la sécurité et la robustesse du code.

Pratique recommandée :

Il est recommandé d'utiliser getline pour toutes les entrées, en garantissant que les caractères de nouvelle ligne sont gérés correctement et la saisie est toujours demandée. Évitez de mélanger >> avec getline pour éviter ces problèmes de tampon.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal