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 :

getchar ne s'arrete pas


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 9
    Par défaut getchar ne s'arrete pas
    Salut tout le monde,

    j'ai un problem avec getchar en c.

    Je voudrais saisir au clavier une chaine de caracteres, à la fin de la saisie (qu'on j'appuie sur ENTER) je veux traiter chaque caractere, et qu'on je tombe sur le caractere codant 'ENTER', je voudrais faire autre chose.

    J'utilise une boucle while de la sorte :

    while ( (c=getchar()) != EOF)
    {
    traiter(c);
    }
    recuperer(<caractere codant ENTER>);

    ...


    Mais la boucle ne s'arrete pas, j'ai beau saisir 50 chaines, appuyer 50 fois sur ENTER, getchar demande toujours a saisir un caractere. A la place de EOF, j'ai beau mettre ' ' ou '\n' ou '\0' ou 13 etc.. ca marche pas,

    pouvez-vous m'aider?
    Merci

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Salut,

    Lorsque tu frappes ENTER, ton buffer clavier reçoit le caractère de fin de ligne (et non EOF). EOF correspond aux touches CTRL-Z (sous Windows) et CTRL-D (sous Linux). Ainsi, la bonne condition pour ta boucle while est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while ( (c=getchar()) != '\n' && c != EOF)
    {
        traiter(c);
    }
    recuperer(<caractere codant ENTER>);
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 9
    Par défaut toujours pas
    Citation Envoyé par mujigka
    Salut,

    Lorsque tu frappes ENTER, ton buffer clavier reçoit le caractère de fin de ligne (et non EOF). EOF correspond aux touches CTRL-Z (sous Windows) et CTRL-D (sous Linux). Ainsi, la bonne condition pour ta boucle while est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while ( (c=getchar()) != '\n' && c != EOF)
    {
        traiter(c);
    }
    recuperer(<caractere codant ENTER>);
    Thierry
    Salut, merci pour la rapidité de la reponse,

    j'ai entré ton code, ca marche toujours pas. je veux faire cela 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
    14
    15
    16
    int compt=0;
    char *stok[50];
    while (compt<50)
    {
      while ( (c=getchar()) != '\n' && c != EOF)
      {
        stock[compt]=c;
        compt++;
      }
      if (c=='\n')
      {
        compt++;
        stok[compt]='1';
        compt++;
      }
    }
    Je veux ainsi avoir les differentes series de saisie separés par 1.

    Comment dois-je m'y prendre?

    Merci

  4. #4
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Bah t'a pas déclaré c

    int c;

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 9
    Par défaut
    Citation Envoyé par Skyrunner
    Bah t'a pas déclaré c

    int c;

    C'était sous entendu, même c etant declarée, le probleme demeure.
    Ctrl-z ne marche pas.

    En saisissant :
    salut <ENTER>
    tout <ENTER>
    le <ENTER>
    monde <ENTER>
    je veux avoir ca dans stok :

    {s,a,l,u,t,1,t,o,u,t,1,l,e,1,m,o,n,d,e,1}

  6. #6
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par multeamage
    C'était sous entendu, même c etant declarée, le probleme demeure.
    Ctrl-z ne marche pas.

    En saisissant :
    salut <ENTER>
    tout <ENTER>
    le <ENTER>
    monde <ENTER>
    je veux avoir ca dans stok :

    {s,a,l,u,t,1,t,o,u,t,1,l,e,1,m,o,n,d,e,1}
    Tu es bien sous Windows ?

  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 multeamage
    C'était sous entendu, même c etant declarée, le probleme demeure.
    Ctrl-z ne marche pas.

    En saisissant :
    salut <ENTER>
    tout <ENTER>
    le <ENTER>
    monde <ENTER>
    je veux avoir ca dans stok :

    {s,a,l,u,t,1,t,o,u,t,1,l,e,1,m,o,n,d,e,1}
    Alors tu copies les caractères sauf les ' ' et les '\n' :
    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
     
    #include <stdio.h>
     
    int main (void)
    {
       char stok[20];
     
       size_t i = 0;
     
       /* saisie */
       {
          int c;
          while ((c = getchar ()) != EOF)
          {
     
             if (i < sizeof stok)
             {
                if (c != ' ' && c != '\n')
                {
                   stok[i] = c;
                   i++;
                }
             }
          }
          stok[i] = '1';
       }
     
       /* affichage (attention, ce n'est pas une chaine) */
       {
          size_t j;
     
          for (j = 0; j < i + 1; j++)
          {
             putchar (stok[j]);
          }
          putchar ('\n');
       }
     
       return 0;
    }
    Sous DOS/Windows :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    salut
    tout
    le
    monde
    ^Z
    saluttoutlemonde1
     
    Press ENTER to continue.
    Ctrl-z, c'est la combinaison des touches marquées Ctrl et Z, on est bien d'accord ?

  8. #8
    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 multeamage
    while ( (c=getchar()) != EOF)
    {
    traiter(c);
    }
    recuperer(<caractere codant ENTER>);

    Mais la boucle ne s'arrete pas, j'ai beau saisir 50 chaines, appuyer 50 fois sur ENTER, getchar demande toujours a saisir un caractere. A la place de EOF, j'ai beau mettre ' ' ou '\n' ou '\0' ou 13 etc.. ca marche pas,
    Le caractère qui correspond à <enter> est '\n' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <stdio.h>
     
    int main (void)
    {
       int c;
       while ((c = getchar()) != EOF)
       {
          putchar (c);
       }
     
       return 0;
    }
    Taper
    azer<enter>
    a<enter>
    b<enter>
    c<enter>
    d<enter>
    ctrl-z<enter>
    Ca donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    azer
    azer
    a
    a
    b
    b
    c
    c
    d
    d
    ^Z
     
    Press ENTER to continue.
    Pour terminer, il faut simuler un EOF. La méthode dépend du système.
    • DOS/Windows : Ctrl-z<enter>
    • Unixoide : Ctrl-d (par défaut, c'est reglable)

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

Discussions similaires

  1. Imprimante qui n'arrete pas d'imprimer
    Par redabadache3 dans le forum Périphériques
    Réponses: 5
    Dernier message: 13/07/2006, 13h19
  2. Réponses: 4
    Dernier message: 13/12/2005, 12h31
  3. [wxPython] Application qui ne s'arrete pas....
    Par Mr Hyde dans le forum wxPython
    Réponses: 9
    Dernier message: 10/11/2005, 16h28
  4. probleme breakpoint ne s arrete pas
    Par benoit70 dans le forum MFC
    Réponses: 4
    Dernier message: 16/03/2005, 11h24
  5. Halt - la machine ne s'arrete pas
    Par Slein dans le forum Administration système
    Réponses: 3
    Dernier message: 01/06/2004, 19h59

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