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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 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

  6. #6
    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...

  7. #7
    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 .

  8. #8
    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


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

  11. #11
    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/

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