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 :

Problème de débutant en C


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Problème de débutant en C
    Bonjour à tous,

    je suis nouveau sur ce forum (et en programmation).
    Je cherche à apprendre le C, mais je me heurte à un problème :
    La valeur de EOF donnée par un programme (faisant un printf de la valeur de EOF) me donne -1 (ça c'est normal).
    Mais je n'arrive pas à trouver quel charactère du clavier correspond à la valeur -1 ...
    ce qui empêche le programme de sortir des boucles while du type while ((c=getchar())!=EOF)

    Normalement ça devrait être la touche entrée non ? mais la valeur de '\n' m'est donnée à 10, ce qui explique pourquoi je n'arrive pas à fermer la boucle...

    Quelqu'un pourrait m'aider ?

    je suis sous windows XP, j'ai utilisé différents compilateurs :
    devC++ & codeblocks
    La bibliothèque est celle standard, stdio.h

    C'est surement complètement idiot, mais je suis bloqué et j'ai essayé un peu de tout.

    Merci par avance

  2. #2
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    Normalement ça devrait être la touche entrée non ? mais la valeur de '\n' m'est donnée à 10, ce qui explique pourquoi je n'arrive pas à fermer la boucle...
    retour chariot et EOF, sont 2 choses differentes ...

    pour "envoyer" EOF, sous linux on fait Ctrl-D.
    il me semble que c'est la meme chose sous windows, mais je n'en suis pas sur.
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    ctrl+D ne marche pas, chez moi en tout cas. ça m'affiche ^D
    c'est très embêtant parce que du coup je ne sais jamais ce que fait réellement mon programme (vu qu'il reste coincé dans la boucle)...

    J'ai testé en faisant #define EOF=10 pour pouvoir utiliser la touche entrée pour sortir de la boucle, mais ça provoque une erreur lors de la compilation...

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par michael-C
    ctrl+D ne marche pas, chez moi en tout cas
    Sous DOS/Windows, c'est Ctrl-Z.
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    es-tu sûr ?

    Car contrôle+Z me donne également ^Z (je viens de tenter ctrl + toutes les touches de mon clavier... et a part ctrl+M qui me fait un retour chariot comme entrée et ctrl+C qui ferme le programme....)

    le programme correspond à un programme du K&R :
    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
    #include <stdio.h>
    #define DEDANS 1
    #define DEHORS 0
    /*compte les lignes, les mots et les caractères en entrée */
     
    main()
    {
          int c, nl, nm, nc, etat;
          nl = nm = nc = 0 ;
           while ((c=getchar())!=EOF)
           {
                ++nc;
                if (c == '\n');
                ++nl     ;
                if (c == ' ' || c == '\n' || c == '\t')
                     etat = DEHORS;
                else if (etat == DEHORS)
                {
                     etat = DEDANS ;
                     ++nm;
     
                }
     
          }
          printf("%d\t %d\t %d\n", nl, nm, nc) ;
     
     
    }
    Normalement il devrait bien fonctionner... et aucune mention de ce problème n'est faite dans leur bouquin...

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par michael-C
    es-tu sûr ?
    Oui. Il faut taper
    <enter>^Z<enter>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    mlkds
    ^Z
    6        1       6
     
    Press ENTER to continue.
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 89
    Points : 91
    Points
    91
    Par défaut
    ctrl + Z puis entrée (et EOF n'est pas un caractère)

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Merci !
    Je sais pas comment j'aurais pu trouver ça ... y a un endroit où on trouve ce genre d'astuce ?

    en tout cas c'est super sympa de votre part, vous venez de me décoincer.

    A bientôt (enfin, j'espère que j'aurias plus de problème avant un moment quand même)

    Michael

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par michael-C
    Je sais pas comment j'aurais pu trouver ça ... y a un endroit où on trouve ce genre d'astuce ?
    La doc de l'OS , sinon, ici !
    Pas de Wi-Fi à la maison : CPL

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

Discussions similaires

  1. requete, problème de débutant
    Par focus dans le forum Access
    Réponses: 4
    Dernier message: 16/02/2006, 05h51
  2. Problème de débutant dans une requête
    Par decour dans le forum Access
    Réponses: 7
    Dernier message: 14/10/2005, 14h17
  3. [C#][service windows] problème de débutant avec 1 timer
    Par Nycos62 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/10/2005, 11h22
  4. Réponses: 3
    Dernier message: 24/09/2005, 09h34
  5. [DB2] problèmes de débutant
    Par rémi_tounul dans le forum DB2
    Réponses: 4
    Dernier message: 21/04/2005, 17h08

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