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 avec scanf


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 19
    Par défaut problème avec scanf
    bonjour,
    voila j'ai un petit problème avec la fonction scanf , en fait j'ai fait un petit programme ou je doit récupérer des caractères, les deux premiers sont récupérés normalement, mais arrivée au troisième caractère, j'ai l'impression que la fonction scanf est ingorée. et il passe directement au instructions suivantes.

    Merci

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par mimina
    bonjour,
    voila j'ai un petit problème avec la fonction scanf , en fait j'ai fait un petit programme ou je doit récupérer des caractères, les deux premiers sont récupérés normalement, mais arrivée au troisième caractère, j'ai l'impression que la fonction scanf est ingorée. et il passe directement au instructions suivantes.

    Merci
    On n'utilise pas scanf mais fgets. C'est mieux, c'est plus sûr et c'est moins une source de problèmes...

    page man : http://man.developpez.com/man3/fgets.3.php
    Jc

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 19
    Par défaut
    merci ,
    J'ai une question peut etre un peu bête, je ne sais pas ce que je doit mettre en paramètre , je pense que fgetc est utilisé avec des fichiers , et moi je fait des lectures du claviers.
    merci

  4. #4
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par mimina
    merci ,
    J'ai une question peut etre un peu bête, je ne sais pas ce que je doit mettre en paramètre , je pense que fgetc est utilisé avec des fichiers , et moi je fait des lectures du claviers.
    merci
    Voici un exemple de base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
        char buf[128];
     
        while(fgets(buf,sizeof(buf),stdin)!=NULL) {
            printf("Vous avez rentre : %s\n",buf);
        }
    }

  5. #5
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Citation Envoyé par mimina
    merci ,
    J'ai une question peut etre un peu bête, je ne sais pas ce que je doit mettre en paramètre , je pense que fgetc est utilisé avec des fichiers , et moi je fait des lectures du claviers.
    merci
    stdin(entréestandard, le plus souvent le clavier) et stdout (sortie standard, le plus souvent l'écran) sont de type FILE.

    fgetc() ainsi que getc() permettent de lire un caractère alors que fgets() permet de lire un chaine de caractères dans un flux que tu choisis.

    getchar() de son côté est équivalent à getc(stdin).

    Un lien pour la route:
    http://man.developpez.com/man3/fgets.3.php


  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 19
    Par défaut
    J'ai essaié, mais ça ne marche pas , voici mon petit programme ( enfin la procedure de lecture ) , je viend juste de commencer , il est un peut mélangé
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    void Lire (int *n)
    {
    int k,  etat;
    char rep;
    int stop=1;
    float l1, l2; 
     
    printf("Taille de la matrice de codage, svp?:: ");
    scanf("%d", n);
    if ((*n<=0)||(*n > N))
    Erreur ("Taille impossible.");
    else
    {
    for(k=1; k<=*n; ++k)
    {
    printf("Pour l'état : %d\n", k);
     
     
    while (stop<=*n)
    {
     
    if(stop==1)
    {
    printf( " indiquer la première valeur \n") ;
    }
    else 
    {
    printf("y'a t'il d'autres valeurs ?o/n\n");
     
    fgets(&rep,1,stdin);
    printf("%c", rep);
     
    if((&rep=="o")||(&rep=="n"))
    {
    if (&rep=="n")
     {
    stop=*n+1;
     
    }
    }
    }
     
    if(stop<=*n)
    {
     
    scanf("%d", &etat);
    printf("\nCitez les limites de l'intervalle associé ");
    printf("\n Limite 1 : ");
    scanf("%f", &l1);
    printf("\n Limite 2 : ");
    scanf("%f", &l2);
    stop =stop+1;
    }
     
    }
     
    }
     
    }
     
    }
    J'ai un problème avec la lecture du caractère rep.
    merci

  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 mimina
    voila j'ai un petit problème avec la fonction scanf , en fait j'ai fait un petit programme ou je doit récupérer des caractères, les deux premiers sont récupérés normalement, mais arrivée au troisième caractère, j'ai l'impression que la fonction scanf est ingorée. et il passe directement au instructions suivantes.
    Ben moi, j'ai pas de problèmes avec scanf(), parce que je suis pas assez fort pour l'utiliser. Alors j'utilise fgets() ou une fonction personnelle construite à base fgetc() et je n'ai pas du tout besoin de scanf().

    http://emmanuel-delahaye.developpez.com/inputs.htm

    Maintenant, si tu veux utiliser scanf() comme un gourou, ben il faut apprendre :

    http://xrenault.developpez.com/tutoriels/c/scanf/

  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 mimina
    je pense que fgetc est utilisé avec des fichiers
    Citation Envoyé par fearyourself
    On n'utilise pas scanf mais fgets
    Il y'a écrit fgets() et tu lis fgetc() . Y'a des chiures de mouches sur ton écran ou quoi ?

    Relire le chapitre sur les E/S dans ton livre de C. stdin est un flux entrant.

    Après, ceci peut aider...

    http://emmanuel-delahaye.developpez....tes.htm#saisie
    http://emmanuel-delahaye.developpez....s.htm#fichiers

  9. #9
    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 homeostasie
    stdin(entréestandard, le plus souvent le clavier) et stdout (sortie standard, le plus souvent l'écran) sont de type FILE.
    FILE *

  10. #10
    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 mimina
    J'ai essaié, mais ça ne marche pas , voici mon petit programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void Lire (int *n)
    {
    scanf("%d", n);
    scanf("%d", &etat);
    scanf("%f", &l1);
    scanf("%f", &l2);
    Mais vire moi ces scanf() qu'on en parle plus...

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 19
    Par défaut
    bonjour,
    merci pour vos conseil , j'ai essaié mais ça ne marche pas , j'arrive à lire des entiers des codes des réels , mais dés que je met un caractère ça ne marche pas.

  12. #12
    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 mimina
    merci pour vos conseil , j'ai essaié mais ça ne marche pas , j'arrive à lire des entiers des codes des réels , mais dés que je met un caractère ça ne marche pas.
    Montre ton code, ma boule de cristal est dans la machine à laver. Ca fait un de ces boucans...

    Et essaye d'être un peu plus précis que "ça ne marche pas"

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 19
    Par défaut
    j'ai essaié avec getchar ça a marché
    En fait, il faux toujours mettre la fonction dans une conditionnel pour que ça marche, c ça ? , parce que j'ai essaié toutes les fonctions mais comme simple instruction ,je pense que c pour ça que ça n'a pas marché .
    enfin, merci pour votre aide.
    @+

  14. #14
    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 mimina
    j'ai essaié avec getchar ça a marché
    En fait, il faux toujours mettre la fonction dans une conditionnel pour que ça marche, c ça ? , parce que j'ai essaié toutes les fonctions mais comme simple instruction ,je pense que c pour ça que ça n'a pas marché .
    J'ai rien compris. N'oublie pas que je n'ai pas ton code sous les yeux... Si tu ne veux pas d'aide, continue comme ça...

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 19
    Par défaut
    mon code je l'ai donné l'autre fois , le voici .

    Citation Envoyé par mimina
    J'ai essaié, mais ça ne marche pas , voici mon petit programme ( enfin la procedure de lecture ) , je viend juste de commencer , il est un peut mélangé
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    void Lire (int *n)
    {
    int k,  etat;
    char rep;
    int stop=1;
    float l1, l2; 
     
    printf("Taille de la matrice de codage, svp?:: ");
    scanf("%d", n);
    if ((*n<=0)||(*n > N))
    Erreur ("Taille impossible.");
    else
    {
    for(k=1; k<=*n; ++k)
    {
    printf("Pour l'état : %d\n", k);
     
     
    while (stop<=*n)
    {
     
    if(stop==1)
    {
    printf( " indiquer la première valeur \n") ;
    }
    else 
    {
    printf("y'a t'il d'autres valeurs ?o/n\n");
     
    fgets(&rep,1,stdin);
    printf("%c", rep);
     
    if((&rep=="o")||(&rep=="n"))
    {
    if (&rep=="n")
     {
    stop=*n+1;
     
    }
    }
    }
     
    if(stop<=*n)
    {
     
    scanf("%d", &etat);
    printf("\nCitez les limites de l'intervalle associé ");
    printf("\n Limite 1 : ");
    scanf("%f", &l1);
    printf("\n Limite 2 : ");
    scanf("%f", &l2);
    stop =stop+1;
    }
     
    }
     
    }
     
    }
     
    }
    J'ai un problème avec la lecture du caractère rep.
    merci
    ce que je voulais dire c quand je met "c=getchar () " ça ne marche pas mais quand je mais if (c=getchar ()=='n' )
    par exemple ça marche .

  16. #16
    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 mimina
    mon code je l'ai donné l'autre fois , le voici .


    Tu as dit que tu l'avais modifié. Comment savoir lequel est le bon ?
    ce que je voulais dire c quand je met "c=getchar () " ça ne marche pas mais quand je mais if (c=getchar ()=='n' )
    par exemple ça marche .
    Certains on passé du temps à t'expliquer qu'il fallait utiliser fgets() pour faire toutes les saisies et à te montrer comment faire.

    Malgré ça, tu t'obstines à faire autrement. Que dire de plus ? Si on parle pour les murs, il vaut mieux qu'on se taise.

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 19
    Par défaut
    mais j'ai essaié avec fgets() mais ça n'a pas marché .

  18. #18
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Et on est censé savoir ce qui "ne marche pas" ?
    Et on est censé savoir comment tu as essayé d'utiliser fgets() ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  19. #19
    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 mimina
    mais j'ai essaié avec fgets() mais ça n'a pas marché .
    Et une nouvelle fois, on est censés deviner le code qui ne fonctionne pas ?

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 19
    Par défaut
    justement tous les exemple que j'ai trouvé sont utlisés dans une conditionnel , while ou bien if , c pour ça que j'ai demandé si il fallait toujours mettre une conditionnel .

Discussions similaires

  1. Problème avec scanf
    Par OLman135 dans le forum Débuter
    Réponses: 1
    Dernier message: 31/10/2008, 14h55
  2. Problème avec "SCANF"
    Par condor666 dans le forum Débuter
    Réponses: 2
    Dernier message: 28/03/2008, 11h20
  3. Problème avec scanf("%s",str)
    Par mathieumadrid dans le forum C
    Réponses: 4
    Dernier message: 18/12/2006, 16h47
  4. problème avec scanf
    Par thierry_b dans le forum C
    Réponses: 10
    Dernier message: 21/12/2005, 20h10
  5. problème avec scanf
    Par troumad dans le forum C
    Réponses: 30
    Dernier message: 20/11/2005, 15h21

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