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 :

Espace dans un scanf


Sujet :

C

  1. #21
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    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 398
    Par défaut
    Pour ça, il suffit d'avoir une fonction purge() comme celle qui est si souvent postée ici.

    Et puis, ça permet de savoir si la ligne a été entièrement prise ou tronquée...
    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.

  2. #22
    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 miron
    Un inconvéniant de fgets, je trouve est qu'il enregistre le '\n', ceu qui lors d'utilisation des chaines peu etre embetant...
    C'est pour ça que le fonction clean() fait le ménage.

    EDIT :

    Mais la vrai solution est d'écrire ses propres fonctions de saisies.

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

  3. #23
    Membre éclairé Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    C'est pour ça que le fonction clean() fait le ménage.

    EDIT : grillaid !

    Mais la vrai solution est d'écrire ses propres fonctions de saisies.

    http://emmanuel-delahaye.developpez.com/inputs.htm
    tres interessant,(Merci)
    seulement trois petites questions,

    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
    #include <stdio.h>
    #include <string.h>
    
    static void purger(void)
    {
        int c;
    
        while ((c = getchar()) != '\n' && c != EOF)
        {}
    }
    
    static void clean (char *chaine)//a quoi sert le static?
    {
        char *p = strchr(chaine, '\n');
        int c;
    
        if (p)
        {
            *p = 0;//A quoi cela sert? je comprend peu etre pas bien ce que retourne strchr
        }
    
        else
        {
            purger();
        }
    }
    
    int main (void)
    {
        char chaine[20], chaine2[20];
    
        printf("Tapez une phrase : \n");
        fgets(chaine, sizeof chaine, stdin);
        clean(chaine);
        printf("Vous avez tape : '%s'", chaine);
    
        printf("Tapez une phrase : \n");
        fgets(chaine2, sizeof chaine2, stdin);
        clean(chaine2);
        printf("Vous avez tape : '%s'", chaine2);
    
        return 0;
    }

  4. #24
    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 miron
    seulement trois petites questions,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    
    static void purger(void)
    {
    }
    
    static void clean (char *chaine)//a quoi sert le static?
    Ici, les fonctions sont 'privées', mais en réalité, si on les mets en bibliothèque, il faut évidement retirer le 'static'...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    {
        char *p = strchr(chaine, '\n');
        int c; /* -ed- ce 'c' est inutile ... */
     
        if (p)
        {
            *p = 0;//A quoi cela sert? je comprend peu etre pas bien ce que retourne strchr
    Tu as lu la doc de strchr() au moins ?

    http://man.developpez.com/

    Je n'ai vu que 2 questions...

  5. #25
    Membre éclairé Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Tu as lu la doc de strchr() au moins ?
    Je n'ai vu que 2 questions...
    Oui bon j'ai conté 2 fois static...

    Bin strchr() retourne l@ de '\n' (en l'occurence), mais en fait ce qui me perturbe c'est de metre un caractere a 0.

    Soit on met ce qui ne sert a rien
    soit ce qui changerais la fin de la chaine.


    A moins que et soit la meme chose...

  6. #26
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    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 398
    Par défaut
    Citation Envoyé par miron
    soit ce qui changerais la fin de la chaine.
    Ben oui, on change la fin de la chaîne : On la termine juste avant le \n (qu'on écrase).
    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.

  7. #27
    Membre éclairé Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Par défaut
    Citation Envoyé par Médinoc
    Ben oui, on change la fin de la chaîne : On la termine juste avant le \n (qu'on écrase).
    donc 0 == '\0' ????

  8. #28
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    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 398
    Par défaut
    Oui.
    '\0' est un char dont la valeur est 0.
    Contrairement à '0' dont la valeur ASCII est 48 (0x30).
    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.

  9. #29
    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 miron
    Bin strchr() retourne l@ de '\n' (en l'occurence), mais en fait ce qui me perturbe c'est de metre un caractere a 0.
    C'est le marqueur de fin de chaine : Ce n'est pas un scoop...

    Ben oui, 0 et '\0', c'est pareil. ('\0' est la notation 'caractère' de 0 en octal.)

    '\1' = 1
    '\7' = 7
    '\10' = 8
    '\377' = 255

    etc. Il n'est pas inutile d'ouvrir un livre de C de temps en temps...

  10. #30
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    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 398
    Par défaut
    Sachant que les séquences d'échappement ne sont pas ce qu'on appelle un "code déchiffrable", car certaines séquences sont préfixes d'autres.
    À la différence des formats de printf(), qui à ma connaissance, sont déchiffrables (ou des caractères spéciaux en HTML &Co, qui le sont à 100%).
    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.

  11. #31
    Membre éclairé Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    C'est le marqueur de fin de chaine : Ce n'est pas un scoop...

    Ben oui, 0 et '\0', c'est pareil. ('\0' est la notation 'caractère' de 0 en octal.)

    '\1' = 1
    '\7' = 7
    '\10' = 8
    '\377' = 255

    etc. Il n'est pas inutile d'ouvrir un livre de C de temps en temps...
    J'en ai un que je consulte régulierement, mais j'avais pas fait le lien dsl.

    Merci.

    bonne journée a vous tous.

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  2. [Access] Nom d'une table avec un espace dans SQL
    Par Corsaire dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/04/2006, 15h50
  3. xml->html : retour chariot, espaces dans un div
    Par d'Oursse dans le forum XML/XSL et SOAP
    Réponses: 9
    Dernier message: 27/04/2004, 19h13
  4. caractère espace dans un lien ?
    Par kayser dans le forum ASP
    Réponses: 2
    Dernier message: 20/04/2004, 09h52
  5. [debutant] preservation des espace dans un fichier xml
    Par Eric B dans le forum XML/XSL et SOAP
    Réponses: 7
    Dernier message: 03/09/2003, 09h43

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