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 de lecture de variable


Sujet :

C

  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    48
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 48
    Par défaut Problème de lecture de variable
    salut tou le monde
    j'ai un petit probleme : lors du saisie d'une chaine composé de deux mot separer par espace le programme saute la lecture de la variable suivante
    et il stocke le deusieme mot dans cette variable (la 2eme).
    comment faire pour resoudre ce probleme.
    gracias .

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par k.cheker
    salut tou le monde
    j'ai un petit probleme : lors du saisie d'une chaine composé de deux mot separer par espace le programme saute la lecture de la variable suivante
    et il stocke le deusieme mot dans cette variable (la 2eme).
    comment faire pour resoudre ce probleme.
    gracias .
    Heu ton code pourrais nous aider à ... t'aider
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    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 k.cheker
    j'ai un petit probleme : lors du saisie d'une chaine composé de deux mot separer par espace le programme saute la lecture de la variable suivante et il stocke le deusieme mot dans cette variable (la 2eme).
    comment faire pour resoudre ce probleme.
    <boule de crystal = ON>
    cesse d'utiliser scanf()

    http://emmanuel-delahaye.developpez.com/inputs.htm
    <boule de crystal = OFF>

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 28
    Par défaut
    Je pense que tu parles d'espaces dans un scanf() et ceci pourrait t'aider : http://www.developpez.net/forums/sho...d.php?t=290633

    EDIT : Rhhh me fais tout le temps griller par ce Emmanuel

  5. #5
    Membre averti
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    48
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 48
    Par défaut
    Citation Envoyé par Franck.H
    Heu ton code pourrais nous aider à ... t'aider
    celui ci le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
       printf("\nsaisir la ville :  ");
       scanf("%s",t[i].ville);
       printf("\nsaisir le pays :  ");
       scanf("%s",t[i].pays);
       printf("\nsaisir le continent :  ");
       scanf("%s",t[i].continent);
       printf("\nsaisir le nombre d habitant :  ");
       scanf("%d",&t[i].nhab);
    on utilisant fgets a la place de scanf ca marche pas

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Ca ne répond pas à tes questions ?
    http://www.developpez.net/forums/sho...d.php?t=290633

  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 k.cheker
    on utilisant fgets a la place de scanf ca marche pas
    Ben si, ça marche ... si on sait s'en servir. Il faut notamment nettoyer proprement la chaine en retirant le \n si il est là, et purger le flux dans le cas contraire...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      printf("\nsaisir la ville :  ");
      fgets(t[i].ville, sizeof t[i].ville, stdin);
      fclean(t[i].ville, stdin);
    avec (version de base)
    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
     
    void fclean (char *s, FILE *fp)
    {
       /* search ... */
       char *p = strchr (s, '\n');
       if (p != NULL)
       {
          /* and kill */
         *p = 0;
       }
       else
       {
          /* purge */
          int c;
          while ((c = fgetc(fp)) != '\n' && c != EOF)
          {
          }
       }
    }
    On peut aussi grouper les 2 fonctions en une seule...

  8. #8
    Membre averti
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    48
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 48
    Par défaut
    Citation Envoyé par Changedman
    Je pense que tu parles d'espaces dans un scanf() et ceci pourrait t'aider : http://www.developpez.net/forums/sho...d.php?t=290633

    EDIT : Rhhh me fais tout le temps griller par ce Emmanuel
    je pense que le cas un peut different car dans le programme il y a lecture d'une variable non plus affectation pour qu'on puisse ajouter a la fin '\0'

  9. #9
    Membre averti
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    48
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 48
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Ben si, ça marche ... si on sait s'en servir. Il faut notamment nettoyer proprement la chaine en retirant le \n si il est là, et purger le flux dans le cas contraire...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      printf("\nsaisir la ville :  ");
      fgets(t[i].ville, sizeof t[i].ville, stdin);
      fclean(t[i].ville, stdin);
    avec (version de base)
    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
     
    void fclean (char *s, FILE *fp)
    {
       /* search ... */
       char *p = strchr (s, '\n');
       if (p != NULL)
       {
          /* and kill */
         *p = 0;
       }
       else
       {
          /* purge */
          int c;
          while ((c = fgetc(fp)) != '\n' && c != EOF)
          {
          }
       }
    }
    On peut aussi grouper les 2 fonctions en une seule...
    tou ça pour resoudre ce petit probleme je pence qu'il y a une methode plus facile que ca <dsl>
    je pense qu'il ne considere pas l'espace comme un caractere non
    merci pourtant pour ton aide .

  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 k.cheker
    tou ça pour resoudre ce petit probleme je pence qu'il y a une methode plus facile que ca <dsl>
    je pense qu'il ne considere pas l'espace comme un caractere non
    merci pourtant pour ton aide .
    Si tu 'pences' faire mieux, be my guest ...

  11. #11
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Citation Envoyé par k.cheker
    tou ça pour resoudre ce petit probleme je pence qu'il y a une methode plus facile que ca <dsl>
    je pense qu'il ne considere pas l'espace comme un caractere non
    merci pourtant pour ton aide .

    Ben quand tu auras trouvé, fais nous part de ta solution, nous avons hâte de la voir.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  12. #12
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par k.cheker
    tou ça pour resoudre ce petit probleme je pence qu'il y a une methode plus facile que ca <dsl>
    je pense qu'il ne considere pas l'espace comme un caractere non
    merci pourtant pour ton aide .
    Tu as sans doute l'impression que scanf te pemet de gagner du temps en mise en oeuvre mais ce n'est qu'une face cachée, surtout si tu ne maîtrise pas cette fonction et il faut savoir que le C parfois ne permet pas de faire les choses aussi facilement qu'on l'espère donc souvent il faut sorti l'artillerie ... Moi perso j'aurais fait comme notre ami Emmanuel
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  13. #13
    Membre averti
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    48
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 48
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Si tu 'pences' faire mieux, be my guest ...
    c vrai que je suis débutant mais si on cherche on trouve

  14. #14
    Membre averti
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    48
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 48
    Par défaut
    merci tou le monde
    je vais essayer cette methode mais d'autre part je cherche encore une autre methode plus simple .

  15. #15
    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 k.cheker
    merci tou le monde
    je vais essayer cette methode mais d'autre part je cherche encore une autre methode plus simple .
    En 20 ans de C dont 17 ans de métier et 6 ans de forums C de haut niveau (clc etc.), j'ai pas trouvé... Mais si tu fais une découverte majeure, j'espère qu'on sera au courant...

  16. #16
    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
    Citation Envoyé par k.cheker
    merci tou le monde
    je vais essayer cette methode mais d'autre part je cherche encore une autre methode plus simple .
    Qu'est-ce qui ne te convient pas dans la méthode proposée par Emmanuel? La seule manière de faire plus simple est de résoudre le problème à la base en te construisant toi même ta propre bibliothèque de entrées-sorties en t'inspirant de cet article http://emmanuel-delahaye.developpez.com/inputs.htm sur le site d'Emmanuel précisément. C'est plus compliqué dans un premier temps, mais ensuite, c'est pour la vie...

    Il est possible de faire ce que tu veux avec scanf() (voir la référence qui t'a été donné plus haut), mais ce n'est en tout cas pas plus simple (c'est même de la haute voltige avec tous les risques d'erreurs qui vont avec). Je pense que la solution d'Emmanuel convient tout à fait à ce que tu recherches.

    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. Réponses: 4
    Dernier message: 02/03/2012, 09h44
  2. [ZF1.9.2]Problème avec lecture variable constante
    Par vince29 dans le forum Zend Framework
    Réponses: 2
    Dernier message: 28/02/2011, 09h32
  3. problème de lecture base de registre
    Par pafounet3 dans le forum MFC
    Réponses: 10
    Dernier message: 31/12/2003, 14h06
  4. [fread] Problème de lecture de buffer
    Par karl3i dans le forum C
    Réponses: 2
    Dernier message: 25/09/2003, 09h21
  5. Réponses: 4
    Dernier message: 23/07/2003, 13h07

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