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 :

[debutant]prinf inactif apres un getchar().


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    Par défaut [debutant]prinf inactif apres un getchar().
    Bonjour à tous,

    Je viens de commencer à apprendre le C. Au bout d'un jour j'ai enfin réussi à faire fonctionner normalement Borland (lol, et encore j'arrive pas à avoir une présentation windows).

    J'ai fait quelques scripts hyper simples comme des printf puis des boucles pour découvrir par exemple conbien de caractères contenait mon getchar(). Cependant, et tout d'un coup, plus rien ne marche !

    J'arrive à faire des printf, mais dès que je mets par exemple ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while (getchar() != EOF) {
            +carac;
    }
    , eh bien ca ne marche plus. J'ai bien définit ma variable carac au début de main(). Apres ces quelques lignes de codes, lorsque j'essaie de faire un printf, cela ne marche plus. Quand je tape sur entrée pour confirmer le mot entré, cela me fait un retour à la ligne, vide.

    Comment se fait-il que ça ne marche plus ? Je crois que ça ne peux pas être un problème de librairie parce que mon printf marche avant la ligne de code que je vous ai montré. (cela ne marche pas non plus avec une boucle for à la place de la while).

    Merci d'avance pour votre aide parce que là je peux pas avancer et je ne sais vraiment pas du tout quoi faire.

    Merci.

    PS : Euh tant que vous y êtes vous pouvez m'expliquer comment on fait pour afficher des fenetres windows, ou c'est trop dur ? Parce que je suis allé voir le tutoriel de Borland compiler 5.5 je crois, et quand je copie le code donné qui est censé ouvrir une fenetre, et bien non, cela ne marche pas ...

  2. #2
    jmv
    jmv est déconnecté
    Membre chevronné Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Par défaut
    je pense plutôt que ton programme ne sort jamais de la boucle "while".

    si tu appuie sur la touche "entrée" getchar() retourne '\n' ( ou '\r') mais pas EOF

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    Par défaut
    Ah bon ? D'abord merci pour ta réponse

    Le problème c'est que avant j'ai toujours fait comme ça, et c'est comme ça que mon livre le montre (c'est le livre des créateurs du C).

    Mais alors comment faire pour terminer le getchar() si la touche entrée ne va pas ??

  4. #4
    jmv
    jmv est déconnecté
    Membre chevronné Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Par défaut
    essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     while(getchar() != '\n') 
    {
            +carac; // y a pas une erreur ici ????
    }
    j'ai testé sous win2K avec BuilderC++

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Par défaut
    une base de test plus correcte sur la fonction getchar :
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main( void )
    {
       char buffer[81];
       int i, ch;
     
       printf( "Enter a line: " );
     
       /* Read in single line from "stdin": */
       for( i = 0; (i < 80) &&  ((ch = getchar()) != EOF) 
                            && (ch != '\n'); i++ )
          buffer[i] = (char)ch;
     
       /* Terminate string with null character: */
       buffer[i] = '\0';
       printf( "%s\n", buffer );
       return EXIT_SUCCESS;
    }
    lecture des caracteres au clavier jusqu'a un "entree" ou fin de fichier (EOF) ou + 80 caractères saisie et affectation des caractère a une chaines de caractère que l'on termine correctement ('\0')

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    Par défaut
    Merci beaucoup pour vos réponses, et c'est bien ça, il fallait mettre que la boucle s'arrête quand elle rencontre un \n et pas un EOF.

    Mais j'aimerais quand même savoir si possible pourquoi avant quand je tapais entrée, c'était considéré comme un EOF et maintenant c'est seulement considéré comme un \n. Et dans ce cas comment je peux faire pour dans mon getchar() entrer un texte de plusieurs lignes, puisque quand je fais entrée ça me sort de la boucle ?

    Merci d'avance, j'aimerais vraiment savoir pourquoi ça fait ça

    Merci encore pour vos réponses.

  7. #7
    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 foup
    Merci beaucoup pour vos réponses, et c'est bien ça, il fallait mettre que la boucle s'arrête quand elle rencontre un \n et pas un EOF.
    Ca dépend de la spec. Si il fallait lire un fichier entier ou simplement une ligne.
    Mais j'aimerais quand même savoir si possible pourquoi avant quand je tapais entrée, c'était considéré comme un EOF
    <entrée> produit un '\n', pas un EOF. Pour simuler un EOF au clavier, ça dépend du système.

    MS-DOS / Windows : Ctrl-Z
    Unix / Linux/ Mac Os X : Ctrl-D par défaut (c'est programmable)
    Mac OS <= 9 : Je ne sais plus...

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    Par défaut
    C'est excellent !

    Merci beaucoup, c'est vraiment cool d'avoir des réponses qui marchent vraiment

    Encore merci. Euh quelqu'un saurait-il par hasard pourquoi avant quand je faisais entrée ca faisait EOF et plus maintenant ?

    Bon c'est un détail, après je me mets en résolu.
    Merci encore ça fait vraiment plaisir

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    Par défaut
    Bon j'ai pas testé mais j'y avais pas pensé : j'ai changé de compilateur je crois (de DevC++ à borland 5.5 compiler).
    Ca doit être pour ça ...

    Merci encore.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/05/2007, 10h33
  2. Réponses: 9
    Dernier message: 02/02/2006, 15h46
  3. [DEBUTANT] [APPLET] Probléme aprés compilation !
    Par crazyman8 dans le forum Applets
    Réponses: 5
    Dernier message: 13/01/2006, 18h18
  4. [debutant] limiter nombre apres virgule
    Par tony_big_guy dans le forum Langage
    Réponses: 6
    Dernier message: 11/01/2006, 14h29
  5. Réponses: 2
    Dernier message: 26/07/2005, 15h35

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