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

SL & STL C++ Discussion :

Problème avec cin


Sujet :

SL & STL C++

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Par défaut Problème avec cin
    Voila, quand j'utilise cin, j'ai que des problèmes avec des cas particulier.
    Déjà, lorsque j'écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char Nom[20];
    cin >> Nom;
    Est ce que cin met le "\0" à la fin de la chaîne?

    et le problème plus important, voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    cout << "Entrer votre nom : "; cin >> Nom;
    strcat(Nom, "\0");
    do {
        cout << "Quel âge voulez-vous avoir (entre 16 et 24 ans) : ";
        cin >> Age;
    } while (Age<16 || Age>24);
    Si je rentre Nom sans blanc ca marche impeccable mais si je met un blanc alors il fais que de tourner dans la boucle pour saisir l'âge et je ne peux pas le saisir.
    Alors que ce passe-t-il ?

    Merci pour vos réponses.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    En gros, l'opérateur >> va s'arreter au premier espace, et va prendre ce qui suit et le mettre dans ta variable age. Or ce n'est pas un entier, donc ton programme va boucler indéfiniment puisqu'il ne peut jamais vider le buffer d'entrée.

    Utilise des string et non des char*, utilise getline pour saisir une chaine avec espaces, et enfin vérifie tes saisies et gère les erreurs correctement.

    http://c.developpez.com/faq/cpp/?pag...et_string_line
    http://c.developpez.com/faq/cpp/?pag...e#SL_cin_clear
    http://c.developpez.com/faq/cpp/?pag...#SL_cin_verify
    http://c.developpez.com/faq/cpp/?page=strings


  3. #3
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Par défaut
    Merci

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Par défaut
    Bon, étant donné que je ne connais pas encore les string, j'ai utilisé gets(Nom) et ca marche.

    Mais est ce que cin mais le zéro bianaire à la fin de la chaîne ?
    Idem pour gets() ?

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Vraiment, tu devrais utiliser les string. C'est vraiment très facile à manipuler, et ça t'evitera les ennuis habituels de ces vieilles fonctions du C. En plus, mixer les flux C et C++ n'est pas conseillé.

    Pour répondre à ta question : je ne sais pas, ici on fait du C++

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 10
    Par défaut
    avant j'utiliser char, mais maintenant c'est surtout string

    l'avantage de string, c'est qu'il est beaucoup plus simple et tu comprend plus facilement les erreurs du a un string que celle du a un char

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Par défaut
    Je ne les ai pas encore vu les string mais je les utiliserais après. En plus, il faut que mon compilateur les acceptes, il refuse les booleén.

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    C'est quoi ton compilo ? Il refuse quel genre de syntaxe avec les booléens ?

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 10
    Par défaut
    pour les booleen, ils ne sont pas indispensable heuresement

    il te suffit de faire un int a la place

    par exemple int var;
    if (var==1) ton code
    else ton autre code

    c'est ce que je faisait au debut, avant de savoir l'existance des booleens

  10. #10
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    C'est louche... istream (type de cin) définit is_open() par exemple qui renvoie un... booléen.
    Les booléens c'est bool en C++, pas boolean

  11. #11
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Par défaut
    Alors mon compilo c'est Turbo C++ 4.5

    Quand je mats bool a; il me marque une erreur.

    Je remplace aussi les bool par des entiers.

  12. #12
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Si tu peux chnager de compilo ce sera pas plus mal, c'est un peu une anthiquité .

  13. #13
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Par défaut
    Oui, j'en cherche un.

  14. #14
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    http://c.developpez.com/compilateurs

    Je te conseille Dev-C++.

  15. #15
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Par défaut
    J'ai Dev-C++ mais il ne fait pas le mode graphique (bon ca c'est pas trop important) mais je ne pouvais pas utiliser clrscr() ni gotoxy() alors j'avais des problèmes d'affichage.*
    A part qu'il y ai des nouvelles fonctions pour les remplacer, je ne sais pas.

  16. #16
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Ca n'existe pas en standard C++. Donc ton code avec gotoxy() etc... ne compilera qu'avec Turbo C++.
    Si tu vises Windows, tu peux utiliser/adapter/t'inspirer de cette classe:
    http://c.developpez.com/faq/vc/?page...ConsoleWindows
    Au moins ça passera sous la plupart des compilos Windows.
    Pour bool, as-tu bien enregistré ton fichier avec l'extension .cpp et pas .c ?

  17. #17
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Par défaut
    Non mais pour les bool ce n'est pas important.

  18. #18
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Par défaut
    Visual C++ 6.0 est bien ou pas ?

  19. #19
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Par défaut
    C'est bizarre, avec turbo C++ 4.5, il me trouve aucune erreur dans mon programme mais Visual C++ 6.0 il m'en trouve 259 !!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème avec cin
    Par timiti29 dans le forum Débuter
    Réponses: 1
    Dernier message: 19/09/2010, 20h41
  2. Problème avec cin.getlin dans un for
    Par Carnat89 dans le forum Débuter
    Réponses: 2
    Dernier message: 02/07/2009, 21h09
  3. probléme avec cin et getchar()
    Par open_source dans le forum C++
    Réponses: 4
    Dernier message: 17/12/2007, 20h29
  4. problème avec std::cin
    Par _LVEB_ dans le forum SL & STL
    Réponses: 4
    Dernier message: 20/02/2007, 00h35
  5. Problèmes avec cin.
    Par Kr00pS dans le forum SL & STL
    Réponses: 6
    Dernier message: 30/10/2006, 23h22

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