IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Erreur : Acquisition d'une chaine au clavier


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 58
    Points : 34
    Points
    34
    Par défaut Erreur : Acquisition d'une chaine au clavier
    Voici mon bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char *chaine =  new char[BUFSIZ];
    cin.getline(chaine,BUFSIZ,'\n');
    Quand je tape une chaine de taille supérieur a BUFSIZ, sa plante (normal) !

    Comment je peux faire pour éviter ça ?

    Exception ?

    si oui, comment la gérer ?
    Sinon :

  2. #2
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    std::getline !!! (et pas std::istream::getline)
    FAQ.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Membre éclairé Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Points : 795
    Points
    795
    Par défaut
    Et pendant qu'on y est, tu pourrais utiliser les string C++:
    http://c.developpez.com/faq/cpp/?page=strings

  4. #4
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    C'est tout le principe de std::getline
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 58
    Points : 34
    Points
    34
    Par défaut
    OK je suis aller voir, et j'ai vu un bout de code que j'ai adapter pour moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try
    	{
    		cin.getline(Chaine_Entrante,BUFSIZ,'\n'); 
    	}
    	catch (const out_of_range &  exception )
    	{
    		cerr << "Erreur, le commande que vous avez entrée est trop longue\n";
    	}
    au début c'était sa mais il m'as dit qu'il ne reconnaissais pas std !

    Les erreurs qu'il me mets maintenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    error C2146: syntax error : missing ',' before '&'
     error C2061: syntax error : '&'
    comprens pas : : :

  6. #6
    Membre éclairé Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Points : 795
    Points
    795
    Par défaut
    Tu veux pas nous montrer ton code?
    Parce que j'ai un peu de peine à voir le prob...
    Es-tu sûr que tu utilises des string?

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 58
    Points : 34
    Points
    34
    Par défaut
    Non, je n'utilise pas les string ! ( c'est une contrainte )

    Ce que je veux faire, c'est l'acquisition d'une ligne de commande, avec cin.getline() !

    voici ma commande qui le fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cin.getline(Chaine_Entrante,BUFSIZ,'\n');
    Jusque là tout va bien !


    Mais si on entre une ligne de commande supérieur a BUFSIZ => pas bien !!!

    cin.getline me renverra les BUFSIZ premier caractère et effectue le code qui suit !

    Ensuite il recommence avec les caractère restant !!

    Il faut que je puisse controler que toute la chaine est lue en 1 fois !!!

    Mais comment faire ?

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 58
    Points : 34
    Points
    34
    Par défaut
    je vais utilisé cin.gcount() !! IOL me renvoi le nombre de carctère lu par cin.getline . Je pourrais donc controller combien de caractètre il a lu !

    Ce qu'il me fallait

    Merci a tous

  9. #9
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Comme on te l'a déjà dit 100 fois, utilise std::getline.
    Boost ftw

  10. #10
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Citation Envoyé par loufoque
    Comme on te l'a déjà dit 100 fois, utilise std::getline.
    Sauf qu'il a la contrainte stupide (ou d'origine pédagogique pour démontrer à quel point les strings c'est mieux -- dans le meilleur des mondes) de ne pas utiliser std::string.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  11. #11
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Ah oui pardon, j'avais lu en diagonale.
    Boost ftw

Discussions similaires

  1. [excel] Insérer l'erreur #valeur# a une chaine de caractères
    Par law56100 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 23/02/2009, 14h52
  2. erreur pour une insertion d'une chaine de caractere dans une cellule
    Par amel95140 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/10/2006, 09h09
  3. recuperer une chaine saisie en clavier
    Par salim81 dans le forum Langage
    Réponses: 1
    Dernier message: 07/09/2006, 10h31
  4. Erreur de segmentation sur une chaine en récursif...
    Par laurent_ifips dans le forum C
    Réponses: 12
    Dernier message: 13/12/2005, 16h04
  5. gerer les ' dans une chaine pour eviter erreur sql
    Par Malone dans le forum Langage
    Réponses: 3
    Dernier message: 24/08/2005, 14h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo