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 :

fgetc ne rend pas la main


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de J4e8a16n
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 271
    Par défaut fgetc ne rend pas la main
    Bonjour à tous,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    APPEL 
    x= fgetc(stdin);
    un_joueur(x);
     
    logiciel();
     
    x= fgetc(stdin);
    un_joueur(x);
     
    logiciel();
     
    etc
    Comportement. Le logiciel s'exécute plusieur fois sans rendre la main.De plus la fonction joueur semble n'avoir même pas le temps d'effectuer ses calculs et de les printfter.
    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
     
    Le first: logiciel |= 1 << 0  = 1
          1 = 00000000 00000000 00000000 00000001
     
    -------------------
     
    -------------------
    8
     
    -------------------
    >move[0]=4
    k = 4
    >move[2]=2
    >move[3]=6
    >move[4]=8
    >move[5]=1
    >move[6]=3
    >move[7]=5
    >move[8]=7
    bestMove= 4, joueur= 0, logiciel(1)|= 1 << 4  = 17
         17 = 00000000 00000000 00000000 00010001
     
    -------------------
     
    -------------------
    >move[2]=2
    k = 2
    >move[3]=6
    >move[4]=8
    Il est gagnant[273]
    bestMove= 8, joueur= 0, logiciel(17)|= 1 << 8  = 273
        273 = 00000000 00000000 00000001 00010001
    Il est gagnant[273]
    JPD

  2. #2
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    fgetc ne lit qu'un caractère du tampon d'entrée (stdin), peu etre que ton buffer d'entrée contiens plusieurs caractères, dans ce cas il lit ce qu'il y'a et il n'a pas besoin d'attendre.


    http://linux.die.net/man/3/fgetc

  3. #3
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    En clair, si tu as par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int main()
    {
        int a, b, c, d, e, f;
     
        a = fgetc(stdin);
        b = fgetc(stdin);
        c = fgetc(stdin);
        d = fgetc(stdin);
        e = fgetc(stdin);
        f = fgetc(stdin);
     
        return 0;
    }
    Et que l'utilisateur tape xy puis Entrée. On aura :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    a = 'x'
    b = 'y'
    c = '\n' // Le caractere "Entree"
    d = <Attendre que l'utilisateur tape quelque chose>
    
    L'utilisateur tape z puis Entree.
    
    d = 'z'
    e = '\n'
    f = <Attendre que l'utilisateur tape quelque chose>
    
    Et ainsi de suite.
    Vu de l'utilisateur, fgetc(stdin) est strictement équivalent à getchar(). Utilise donc plutôt getchar. C'est plus simple tu ne trouves pas ?

    Je t'invite également à lier ce tutoriel : Les entrées/sorties en langage C.

  4. #4
    Membre très actif Avatar de J4e8a16n
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 271
    Par défaut
    Merci.

    J'avais lu la note de E.De La Haye.
    J'ai lu scanf mais là, je crois que je vais revenir à getchar().

    Là ça entre...

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 16/11/2007, 11h33
  2. Réponses: 1
    Dernier message: 15/05/2007, 09h16
  3. le Timer ne me rend pas la main
    Par toxycyty dans le forum Windows
    Réponses: 10
    Dernier message: 08/11/2006, 16h54
  4. RMAN ne rend pas la main
    Par big1 dans le forum Recovery Manager
    Réponses: 3
    Dernier message: 29/08/2006, 20h18
  5. Script CMD qui ne rend pas la main
    Par ipeteivince dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 10/06/2005, 11h00

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