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 :

un problème tout bête de scanf !


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 41
    Par défaut un problème tout bête de scanf !
    voilà j'ai un programme dans lequel je dois lire un nom saisi par l'utilisateur au clavier.

    je faisais donc un

    scanf("%s",variable_nom);

    Quand soudain, en bon fan de notre premier ministre, je tente de rentrer
    "DE VILLEPIN".

    Et là, c'est le drame... j'ai amputé le nom de monsieur le chef du gouvernement *sig*.

    En effet dans variable_nom il y a "DE" .

    Alors "comment qu'on fait ?" "comment qu'on fait?"


    En espérant que cette mise en situation loquace vous donnera plein d'idées, merci d'avance.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 22
    Par défaut
    Salut

    Scanf lit jusqu'au premier espace, qu'il remplace par le caractère null une fois atteind dans la chaine et s'arrete. Pour notre premier ministre, tu dois ecrire :

    scanf("%s %s", de, villepin); mais comme tu te rend compte les anciens cas ne fonctionneront pus.

    ou alors tu regarde fgets().

    Alexis

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 186
    Par défaut
    Salut,

    Généralement le scanf a du mal avec les espaces (comme beaucoup de fonctions de saisie de caractères). Tu peut éventuellement palier le problème en placant un tiret "-" ou un underscore "_" entre les deux.

    cordialement.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 41
    Par défaut
    merci beaucoup à vous deux.
    N'ayant pas de contrôle sur la saisie utilisateur, je plance sur fgets, qui devrait faire l'affaire sans problème.
    Merci beaucoup!

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 41
    Par défaut
    argh, cette cochonerie de fgets rajoute un \n de fin de ligne :/

  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 Re: [RéSOLU] un problème tout bête de scanf !
    Citation Envoyé par eizo
    scanf("%s",variable_nom);

    Quand soudain, en bon fan de notre premier ministre, je tente de rentrer
    "DE VILLEPIN".

    Et là, c'est le drame... j'ai amputé le nom de monsieur le chef du gouvernement *sig*.
    Bah, en tant que bon révolutionnaire coupeur de têtes et de particules, ça ne me dérange pas plus que ça...

    Sinon, on utilise les bonnes fonctions :

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

  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 eizo
    argh, cette cochonerie de fgets rajoute un \n de fin de ligne :/
    Heureusement, sinon, comment savoir si on a lu la ligne entière ?

  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 dirty_boy
    Généralement le scanf a du mal avec les espaces (comme beaucoup de fonctions de saisie de caractères).
    Gni ? Qu'est-ce qui ne va pas avec fgets() qui est fait pour ça ?
    Tu peux éventuellement palier le problème en placant un tiret "-" ou un underscore "_" entre les deux.
    Wouah ! La bidouille de la mort...

  9. #9
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par eizo
    argh, cette cochonerie de fgets rajoute un \n de fin de ligne :/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fgets(var, 256, stdin);
    var[strlen(var)-1]=0; // \0

  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 Skyrunner
    Citation Envoyé par eizo
    argh, cette cochonerie de fgets rajoute un \n de fin de ligne :/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fgets(var, 256, stdin);
    var[strlen(var)-1]=0; // \0
    Bravo, tu as tué l'otage. Méthode russe ?

    Si le '\n' n'est pas présent, on tue un caractère innocent (et on est pas prévenu). La seule méthode reconnue est 'search and kill' à base de strchr().

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [problème tout bête] clause WHERE
    Par vever88 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 22/05/2007, 10h10
  2. Un problème tout bête
    Par michpc dans le forum Flash
    Réponses: 1
    Dernier message: 13/02/2007, 14h59
  3. Réponses: 39
    Dernier message: 21/10/2006, 13h53
  4. [MySQL] Php, problème tout bète... :D
    Par Djsarkndp dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/04/2006, 18h36
  5. [FLASH MX]Un problème tout bête !
    Par Kikoah dans le forum Flash
    Réponses: 11
    Dernier message: 02/06/2004, 13h16

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