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 :

Comment simuler EOF au clavier


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : Mai 2004
    Messages : 102
    Points : 75
    Points
    75
    Par défaut Comment simuler EOF au clavier
    Salut tt le monde,

    Voici mon code :

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
    int c,l=0,e=0,t=0;
     
    while(c=getchar()!=EOF)
    {
        switch(c)
        {
              case '\n':++l;
              break;
              case ' ':++e;
              break;
              case '\t':++t;
              break;
        }
    }
     
    printf("Il y a %d ligne(s), %d espace(s) et %d tabulation(s)\n",l,e,t);
     
        system("pause");
        return 0;
    }
    Ma question:
    Comment simuler EOF au clavier pour pouvoir sortir de ma boucle ?

    merci pour votre aide,

    ps: J'ai acheter le bouquin le language c, il est super bien fait.
    Quand mille personnes prennent la route, il en faut une pour prendre la tête.

    LPIC2 - CCNA - MCP

  2. #2
    Membre régulier Avatar de kaisse
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 100
    Points : 117
    Points
    117
    Par défaut
    EOF est donc le caractère de fin de fichier et n'est donc pas attribué à une touche. Elle peut être simulée par une combinaison de touche, mais ca dépend de l'OS (ctrl-d sous Linux, sous Windows .. essaye ctrl-d ou ctrl-c, mais je ne te garantis rien).

    P.S.: euh oui, mais le langage C, il doit y avoir une tripotté de bouquins qui s'appellent comme ça. Lequel ? Le Kernighan et Ritchie ? Un autre ?

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : Mai 2004
    Messages : 102
    Points : 75
    Points
    75
    Par défaut
    Merci,

    J'ai tester les deux, je suis sous xp et ça n'a pas l'air de fonctionner.

    Mon bouquin Le Kernighan et Ritchie et terrible ...
    Quand mille personnes prennent la route, il en faut une pour prendre la tête.

    LPIC2 - CCNA - MCP

  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 Re: [debutant]getchar
    Citation Envoyé par beloc
    Voici mon code :
    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
    int c,l=0,e=0,t=0;
    short i;
     
    for(i=0;c=getchar()!=EOF;++i)
    {
        switch(c)
        {
              case '\n':++l;
              break;
              case ' ':++e;
              break;
              case '\t':++t;
              break;
        }
    }
     
    printf("Il y a %d ligne(s), %d espace(s) et %d tabulation(s)");
     
        system("pause");
        return 0;
    }
    • A quoi sert 'i' ?
    • Pourquoi est-il de type short ?
    • le printf() est incomplet. Il manque les paramètres numériques et un '\n' à la fin de la chaine.

    Comment simuler EOF au clavier pour pouvoir sortir de ma boucle ?
    • Windows : Ctrl-Z[<enter>]
    • Unixoïde : Ctrl-D
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : Mai 2004
    Messages : 102
    Points : 75
    Points
    75
    Par défaut Re: [debutant]getchar
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par beloc
    Voici mon code :
    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
    #include <stdio.h> 
    #include <stdlib.h> 
     
    int main() 
    { 
    int c,l=0,e=0,t=0; 
     
    while(c=getchar()!=EOF) 
    { 
        switch(c) 
        { 
              case '\r':++l; 
              break; 
              case ' ':++e; 
              break; 
              case '\t':++t; 
              break; 
        } 
    } 
     
    printf("Il y a %d ligne(s), %d espace(s) et %d tabulation(s)\n",l,e,t); 
     
        system("pause"); 
        return 0; 
    }
    • A quoi sert 'i' ?
    • Pourquoi est-il de type short ?
    • le printf() est incomplet. Il manque les paramètres numériques et un '\n' à la fin de la chaine.

    Comment simuler EOF au clavier pour pouvoir sortir de ma boucle ?
    • Windows : Ctrl-Z[<enter>]
    • Unixoïde : Ctrl-D
    J'ai corrigé le code en haut.

    Après avoir exécuté mon programme, pour pouvoir voir mon printf, je dois faire enter et ensuite ctrl - z.

    Les variables l,e,t reste tjs a 0 !!! (Je suppose un problème dans le switch, j'ai essayé de changer '\r', ' ', '\t' par leurs valeurs ascii mais rien n'a changer)

    J'ai déclaré c en int, si j'ai bien compris, il faut que le type soit assez grand pour pouvoir contenir n'importe quelles valeurs renvoyé par getchar.

    On ne peut pas ce servir de char pour pouvoir recevoir EOF.

    merci,
    Quand mille personnes prennent la route, il en faut une pour prendre la tête.

    LPIC2 - CCNA - MCP

  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 Re: [debutant]getchar
    Citation Envoyé par beloc
    Après avoir exécuté mon programme, pour pouvoir voir mon printf, je dois faire enter et ensuite ctrl - z.
    Ok.
    Les variables l,e,t reste tjs a 0 !!! (Je suppose un problème dans le switch, j'ai essayé de changer '\r', ' ', '\t' par leurs valeurs ascii mais rien n'a changer)
    Pour compter les lignes, c'est '\n' et pas '\r'. C'est portable.
    J'ai déclaré c en int, si j'ai bien compris, il faut que le type soit assez grand pour pouvoir contenir n'importe quelles valeurs renvoyé par getchar.
    Un char suffirait, mais il doit aussi recevoir EOF.

    Fonctionne bien sous Borland C (avec '\n') :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ùmsl *ùslm sd
    lksdm lsdùmklsd
     mlksdùmlksd
    ^Z
    Il y a 3 ligne(s), 4 espace(s) et 0 tabulation(s)
    Par contre, sous Dev-C++ (4.9.9.0), c'est plutôt bizarre, la ligne de résultats ne s'affiche pas...
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : Mai 2004
    Messages : 102
    Points : 75
    Points
    75
    Par défaut Re: [debutant]getchar
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par beloc
    Après avoir exécuté mon programme, pour pouvoir voir mon printf, je dois faire enter et ensuite ctrl - z.
    Ok.
    Les variables l,e,t reste tjs a 0 !!! (Je suppose un problème dans le switch, j'ai essayé de changer '\r', ' ', '\t' par leurs valeurs ascii mais rien n'a changer)
    Pour compter les lignes, c'est '\n' et pas '\r'. C'est portable.
    J'ai déclaré c en int, si j'ai bien compris, il faut que le type soit assez grand pour pouvoir contenir n'importe quelles valeurs renvoyé par getchar.
    Un char suffirait, mais il doit aussi recevoir EOF.

    Fonctionne bien sous Borland C (avec '\n') :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ùmsl *ùslm sd
    lksdm lsdùmklsd
     mlksdùmlksd
    ^Z
    Il y a 3 ligne(s), 4 espace(s) et 0 tabulation(s)
    Par contre, sous Dev-C++ (4.9.9.0), c'est plutôt bizarre, la ligne de résultats ne s'affiche pas...
    J'utilise Dev-C++(4.9.9.1) justement.
    Content de savoir que mon code est correct. C'est le compilateur qui déconne ?!!!

    Je corrige le \r en \n.

    merci beaucoup pour ton aide,

    Je suis vraiment content du bouquin que tu m'as conseillé.
    Quand mille personnes prennent la route, il en faut une pour prendre la tête.

    LPIC2 - CCNA - MCP

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : Mai 2004
    Messages : 102
    Points : 75
    Points
    75
    Par défaut
    J'ai trouver le problème vient de :

    Fonctionne pas sous dev-c++ : while(c=getchar()!=EOF)

    Fonctionne sous dev-c++ : while((c=getchar())!=EOF)

    Il fallait rajouter des parenthèses.
    Quand mille personnes prennent la route, il en faut une pour prendre la tête.

    LPIC2 - CCNA - MCP

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : Mai 2004
    Messages : 102
    Points : 75
    Points
    75
    Par défaut
    Resalut,

    J'ai une autre question concernant 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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
        long nc=0;
        int c;
        ;
     
        while(((c=getchar())!=EOF)&&(c!='\n'))
        ++nc;
     
     
        printf("Nombre de caractere(s) :%ld\n",nc);
        system("pause");
    return 0;    
    }
    Le code fonctionne bien, je voulais juste savoir pourquoi quand je change '\n' par '\r' ça ne fonctionne plus ! (En faites plus moyen de sortir de la boucle avec enter)

    \r = enter
    \n = nv ligne

    Je me trompe ?

    merci,
    Quand mille personnes prennent la route, il en faut une pour prendre la tête.

    LPIC2 - CCNA - MCP

  10. #10
    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 beloc
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
        long nc=0;
        int c;
        ;
     
        while(((c=getchar())!=EOF)&&(c!='\n'))
        ++nc;
     
     
        printf("Nombre de caractere(s) :%ld\n",nc);
        system("pause");
    return 0;    
    }
    Le code fonctionne bien, je voulais juste savoir pourquoi quand je change '\n' par '\r' ça ne fonctionne plus ! (En faites plus moyen de sortir de la boucle avec enter)

    \r = enter
    \n = nv ligne
    • getchar() lit ses données sur stdin
    • stdin est ouvert en mode texte par défaut
    • dans ce mode, le séparateur de ligne (vu du C) est '\n', quelque soit le système.
    • La touche <enter> introduit une 'fin de ligne'.
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : Mai 2004
    Messages : 102
    Points : 75
    Points
    75
    Par défaut
    Ok,

    un grand merci,
    Quand mille personnes prennent la route, il en faut une pour prendre la tête.

    LPIC2 - CCNA - MCP

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

Discussions similaires

  1. comment simuler l'appui sur une touche de clavier
    Par chekkal dans le forum Débuter
    Réponses: 2
    Dernier message: 21/10/2013, 14h18
  2. Comment simuler click souris et clavier
    Par canyouhelpme dans le forum VB.NET
    Réponses: 5
    Dernier message: 28/05/2013, 09h38
  3. Réponses: 2
    Dernier message: 12/08/2010, 15h07
  4. Réponses: 7
    Dernier message: 08/07/2009, 18h22
  5. Réponses: 5
    Dernier message: 29/12/2005, 15h03

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