Maison  >  Article  >  développement back-end  >  Comment `cin` gère-t-il les entrées en C et pourquoi `getline()` est-il préféré pour lire des lignes entières ?

Comment `cin` gère-t-il les entrées en C et pourquoi `getline()` est-il préféré pour lire des lignes entières ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-30 09:12:27586parcourir

How does `cin` handle input in C   and why is `getline()` preferred for reading entire lines?

Comportement du flux d'entrée C avec "cin"

Lors de la lecture d'une entrée à l'aide du flux "cin" en C, il est important de comprendre comment il interagit avec différents types de données. Par défaut, "cin" lit un mot à la fois, ce qui peut entraîner un comportement inattendu lors du traitement de tableaux de caractères ou de chaînes.

Dans l'exemple de code fourni, la méthode "input()" dans le fichier "String " la classe utilise "cin >>" pour lire la chaîne d'entrée. Cependant, cette instruction ne capture qu'un seul mot, ignorant les mots suivants dans l'entrée. Par conséquent, lorsque l'entrée contient plusieurs mots, tels que "steve hawking", seul le premier mot, "steve", est stocké dans le tableau "str".

Solution : Utilisation de getline( ) pour lire des lignes complètes

Pour lire une ligne complète d'entrée dans un tableau de caractères, la fonction "getline()" peut être utilisée à la place de "cin >>". Voici la méthode de saisie mise à jour en utilisant "getline()" :

<code class="c++">void input()
{
    cout << "Enter string :";
    cin.getline(str, sizeof str);
}

"getline()" prend deux arguments : un pointeur vers le tableau de destination et la taille du tableau. Il lit l'entrée jusqu'à ce qu'un caractère de nouvelle ligne soit rencontré, capturant ainsi toute la ligne d'entrée.

Considérations supplémentaires

Il convient de noter que l'utilisation de tableaux de caractères pour la manipulation de chaînes peut être fastidieux et sujet aux erreurs. La bibliothèque standard C fournit la classe « std::string », qui offre une approche plus robuste et plus sûre de la gestion des chaînes. Au lieu d'utiliser des tableaux de caractères, le code pourrait être réécrit comme :

<code class="c++">#include <iostream>
#include <string>

class String
{
public:
    std::string str;

    void input()
    {
        cout << "Enter string :";
        std::getline(std::cin, str);
    }

    void display()
    {
        std::cout << str;
    }
};</code>

Enfin, l'utilisation de fichiers d'en-tête comme "iostream.h" et "conio.h" est obsolète. Le développement C moderne devrait utiliser des fichiers d'en-tête tels que "iostream" et "conio", respectivement.

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