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 :

Mon programme ne s'arrête pas toujours sur scanf [Débutant(e)]


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut Mon programme ne s'arrête pas toujours sur scanf
    salut,
    Malgré toute la mauvaise foi dans je suis capable, je ne pense pas que scanf déconne, il y a un truc dans mon petit programme qui déconne.
    Je fais un petit jeu de pendu pour pratiquer le C ( tutoriel C ).
    Ca fonctionne a peu près sauf que quand dans le fonction getNewLetter, le scanf stoppe le programme qu'une fois sur deux pour que l'utilisateur puisse entrer une lettre...
    j'ai suivi pas à pas avec le degoggeur mais je comprends pas ce qui se passe?

    fichier h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #ifndef DEF_HEADER
    #define DEF_HEADER
     
    #define TAILLE 20
    #define NBRE_COUP 5
     
    void initPendu(char* pendu, const int* etoile);
     
    void afficheCoupRestant(long* coup);
     
    void setGoodLetter(const char* solution, char* pendu, const char* lettre, int* etoile);
     
    void getNewLetter(char* lettre, const char* pendu);
     
    #endif
    fichier c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    #include "header.h"
     
    int main()
    {
        long coup = NBRE_COUP;
        char solution[TAILLE] = "marron";
        char* pendu = NULL;
        int etoile = strlen(solution)-1;
        char lettre = ' ';
     
        pendu = malloc(etoile * sizeof(long));
        initPendu(pendu, &etoile);
     
        printf("Bienvenue dand le pendu !\n");
     
        do{
            afficheCoupRestant(&coup);
            getNewLetter(&lettre, pendu);
            //setGoodLetter(solution, pendu , &lettre, &etoile);
        }while(coup > 0 || etoile == 0);
     
        if (coup == 0) printf("You're dead !\n\n");
        else if (etoile == 0) printf("Bravo vous avez trouve : %s", pendu);
     
    	return 0;
    }
     
    void initPendu(char* pendu, const int* etoile){
        int i = 0;
     
        do {
            pendu[i] = '*';
            i++;
        }while(i <= *etoile);
        pendu[i] = '\0';
    }
     
    void afficheCoupRestant(long* coup){
            long test = *coup;
            printf("\n\nIl vous reste %ld coups a jouer.\n", *coup);
            (*coup)--;
    }
     
    void setGoodLetter(const char* solution, char* pendu, const char* lettre, int* etoile){
        int i = 0;
        char c = ' ';
        do {
            c = solution[i];
            if (c == *lettre){
                pendu[i] = c;
                (*etoile)--;
            }
            i++;
        }while(c != '\0');
    }
     
    void getNewLetter(char* lettre, const char* pendu){
            printf("Quel est le mot secret ? : ");
            printf("%s\n", pendu);
            printf("Proposez une lettre : ");
            scanf("%c", lettre);
    }
    merci de votre aide

  2. #2
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut
    ok, je viens de trouver sur un site...
    le souci c'est que scanf récupère aussi le \n qui va dans le second scanf, d'où le fait que le programme s'arrête qu'une seule fois sur deux.

    la solution semble passée par getchar(), ce qui me fait penser qu'il me semble avoir qq chose à ce propos dans la FAQ

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par julien.63
    le souci c'est que scanf récupère aussi le \n qui va dans le second scanf, d'où le fait que le programme s'arrête qu'une seule fois sur deux.

    la solution semble passée par getchar()
    http://emmanuel-delahaye.developpez.com/inputs.htm

  4. #4
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut
    merci pour ces infos,
    J'ai vu que tu avais d'autres tutoriels qui m'intéressent aussi, alors merci à nouveau.

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

Discussions similaires

  1. [TPW 1.5] Mon programme ne s'exécute pas
    Par WhiteTigerZ dans le forum Turbo Pascal
    Réponses: 6
    Dernier message: 23/09/2007, 23h29
  2. [FASM] Mon programme ne se ferme pas
    Par _SamSoft_ dans le forum x86 16-bits
    Réponses: 12
    Dernier message: 10/09/2007, 18h57
  3. Réponses: 3
    Dernier message: 16/03/2007, 18h04
  4. Mon programme ne s'affiche pas
    Par bugland dans le forum Langage
    Réponses: 3
    Dernier message: 11/01/2007, 12h19
  5. Mon programme empêche l'arrêt de Windows
    Par forzalec dans le forum C++Builder
    Réponses: 4
    Dernier message: 16/11/2006, 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