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 :

Question sur le langage


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 67
    Points : 30
    Points
    30
    Par défaut Question sur le langage
    bonjour,
    comment mettre l'équivalent en C de :

    a=getchar();
    while(getchar() != '\n');

    sans utiliser getchar.

    Merci de vos réponses.

  2. #2
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Comment veux tu utiliser une fonctionnalité du langage C sans utiliser une de ses fonctions? ça n'a pas de sens!!!
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 67
    Points : 30
    Points
    30
    Par défaut
    sans utiliser getchar, comment faire ?

  4. #4
    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 : 47
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par space_56 Voir le message
    sans utiliser getchar, comment faire ?
    fgetc(stdin)?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int a = fgetc(stdin)
     
    if (a != '\n' && a != EOF)
    {
        int c;
     
        while ((c = fgetc(stdin)) != '\n' && c != EOF)
        {
        }
    }
    Il n'y a pas 36 solutions pour purger le tampon du flux d'entrée standard. Qu'est-ce qui ne te convient pas dans cette solution?

    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++

    +

  5. #5
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par Thierry Chappuis Voir le message
    fgetc(stdin)?
    tricheur
    The getchar function is equivalent to getc with the argument stdin.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  6. #6
    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 : 47
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    On peut aussi faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    scanf("%*[^\n]");
    fgetc(stdin);
    Mais bon, on utilises encore getchar().

    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++

    +

  7. #7
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    De toute façon, je ne vois pas où est le problème avec getchar(), il n'y a aucun "pervers" à utiliser cette fonction, elle se comporte très simplement et fais bien ce qu'on lui demande.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  8. #8
    Expert éminent
    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 : 38
    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
    Points : 8 389
    Points
    8 389
    Par défaut
    scanf avec %c peut également remplacer getchar. En reprenant donc le code de Thierry :

  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 space_56 Voir le message
    comment mettre l'équivalent en C de :

    a=getchar();
    while(getchar() != '\n');

    sans utiliser getchar.
    Si tu ne veux pas de getchar(), tu peux remplacer par la fonction de base fgetc(stdin);

    mais on ne sait pas faire plus basique en C standard...

    On peut faire plus compliqué, comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char c;
     
    scanf("%c", &c);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char c;
     
    fscanf(stdin, "%c", &c);
    mais je ne vois pas bien le but de l'opération. Qu'est-ce qui ne va pas avec getchar() ?
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Membre averti Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Points : 414
    Points
    414
    Par défaut
    Citation Envoyé par space_56 Voir le message
    bonjour,
    comment mettre l'équivalent en C de :

    a=getchar();
    while(getchar() != '\n');

    sans utiliser getchar.

    Merci de vos réponses.
    je pense qu'il faut etre claire dans un point, la fonction getchar est l'un des fonction basique du libC, donc en ne peut pas crér une autre fonction qui traite le même fonctionnement avec le code C. par contre on peut utiliser le language ASM peut être !!!!!!!!!
    et ceci, seulement pour capter les evenement materiel catcher par le system..... manipulation des registre je pense....

    alors voila !!!!
    "La créativité est faites d'attention et de respect pour les petits faits de la vie."

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    En tenant compte des remarques de Melem et Emmanuel Delahaye, il suffit donc de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <stdio.h>
     
    char my_getchar(void)
    {
        char c;
        scanf("%c", &c);
        return c;
    }
    Et on a un getchar personnalisé.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    cmoibal, dans ce cas on n'obtient pas un getchar mais plutôt un getch ou un getche ou quelque chose de similaire. En plus pas portable.

  13. #13
    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 cmoibal Voir le message
    je pense qu'il faut etre claire dans un point, la fonction getchar est l'un des fonction basique du libC, donc en ne peut pas crér une autre fonction qui traite le même fonctionnement avec le code C.
    Mmm...

    La vraie fonction de base est fgetc()

    Souvent, on a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define getchar() fgetc(stdin)
    dans <stdio.h>, par exemple... mais la version 'fonction' doit aussi exister (c'est obligatoire).
    Pas de Wi-Fi à la maison : CPL

  14. #14
    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 : 47
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par Melem Voir le message
    scanf avec %c peut également remplacer getchar. En reprenant donc le code de Thierry :
    Attention, bug! Si il ne reste que '\n' dans le tampon du flux d'entrée standard, ton code ne fait rien et scanf() renvoit la valeur 0. Le tampon n'est pas purgé. Cela fonctionne seulement si d'autres caractères que '\n' sont présents dans le tampon au moment de la purge.

    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++

    +

Discussions similaires

  1. questions sur le langage C
    Par mohsenuss91 dans le forum C
    Réponses: 16
    Dernier message: 28/04/2012, 21h41
  2. question sur les langages de programmation de demain
    Par faabian dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 05/01/2010, 14h52
  3. [MySQL] Pour un projet php/mysql : questions sur le langage et l'environnement
    Par 3wicha dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/07/2007, 18h21
  4. Réponses: 4
    Dernier message: 10/04/2007, 18h59

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