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
Barbara Streisandoriginal
2024-11-29 14:14:14494parcourir

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);
  • 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);
}
  • É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!

Déclaration:
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