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 :

scanf: s'arrête la première fois seulement


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Avatar de ProgVal
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 636
    Par défaut scanf: s'arrête la première fois seulement
    Bonjour,

    J'ai écrit le code suivant sous Visual C++ Express.
    Le premier scanf attend que j'appuie sur enter, mais pas le second. Pourquoi?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include "stdafx.h"
    #include <iostream>
     
    using namespace std;
     
    int main(void)
    {
        char c;
        cout << "Bonjour" << endl << "appuyez sur une touche \n";
        scanf(&c); //s'arrête jusqu'à ce que j'appuie sur Enter
        cout << "Bonjour" << endl << "appuyez sur une touche \n";
        scanf(&c); //ne s'arrête pas
    }
    Je rappelle que je suis tout ce qu'il y a de plus débutant.

    Merci d'avance,
    ProgVal

  2. #2
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Je ne sais pas, probablement qu'un reset devrait être effectué, mais là attend une autre réponse que la mienne.
    Par contre, tu utilises cout pour l'affichage, donc pourquoi tu n'utilises pas cin pour l'entrée clavier ?

  3. #3
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Soit tu fait du vrai C++ et tu vire scanf soit tu fait du C et donc tu remplace tout ce qui est C++ dans ton code en demandabt à changer ton sujet de forum.

    Edit: De plus, si tu rentre plus d'un caractère donc autre chose que '\n', ca segfault et ca peut sans doute amener un BOF.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  4. #4
    Membre très actif
    Avatar de ProgVal
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 636
    Par défaut
    Avec mon nouveau code, ça marche...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include "stdafx.h"
    #include <iostream>
     
    using namespace std;
     
    int main(void)
    {
        char c;
        cout << "Bonjour" << endl << "appuyez sur une touche" << endl;
        cin >> c;
        cout << "Bonjour" << endl << "appuyez sur une touche" << endl;
        cin >> c;
    }
    J'aimerai comprendre d'où vient ce problème, tout de même...

  5. #5
    Membre chevronné
    Avatar de ZouBi
    Inscrit en
    Octobre 2007
    Messages
    508
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 508
    Par défaut
    Citation Envoyé par ProgVal Voir le message
    Bonjour,

    J'ai écrit le code suivant sous Visual C++ Express.
    Le premier scanf attend que j'appuie sur enter, mais pas le second. Pourquoi?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include "stdafx.h"
    #include <iostream>
     
    using namespace std;
     
    int main(void)
    {
        char c;
        cout << "Bonjour" << endl << "appuyez sur une touche \n";
        scanf(&c); //s'arrête jusqu'à ce que j'appuie sur Enter
        cout << "Bonjour" << endl << "appuyez sur une touche \n";
        scanf(&c); //ne s'arrête pas
    }
    Je rappelle que je suis tout ce qu'il y a de plus débutant.

    Merci d'avance,
    ProgVal
    C'est surement un soucis de buffer, voir meme syntaxique.

    Premièrement, il faudrait le vider à chaque fois
    donc, code à mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while( ( c = getc() ) != '\n' && c != EOF );
    En plus, dans ton scanf(), tu ne précises pas quelle type recuperer, ta syntaxe est fausse...
    ici, ce serait
    Là tu précises bien que tu veux récuperer un type char.

    Et comme préciser ci dessus, tu mélanges C et C++, donc encore plus simple, remplace scanf() par :
    et voilà.

  6. #6
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Ouais scanf, tu l'utilises pas correctement.
    Si tu fais du C++, utilise les outils C++, c'est quand même franchement plus pratique !

    ?

  7. #7
    Membre très actif
    Avatar de ProgVal
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 636
    Par défaut
    Citation Envoyé par poukill Voir le message
    ?
    Pourquoi demandes-tu ça? J'ai bien marqué [résolu], non?

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

Discussions similaires

  1. contrôle du mot de passe seulement la première fois
    Par laurentSc dans le forum Langage
    Réponses: 3
    Dernier message: 07/08/2010, 17h22
  2. Vider un textarea uniquement la première fois
    Par Msieurduss dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/05/2007, 16h12
  3. [C++][SOCKET]recv() bloque la première fois
    Par xwindoo dans le forum Développement
    Réponses: 15
    Dernier message: 18/08/2006, 20h57
  4. Réponses: 4
    Dernier message: 04/10/2005, 10h47

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