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 :

scanf pour les debutants pas si sûr...


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut scanf pour les debutants pas si sûr...
    salut à tous voila je debute en programmation C et deja les problémes commence...
    j'ai un souci avec scanf:
    voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
             char chaine[100]="";
            <a href="http://man.developpez.com/man3/printf.3.php" target="_blank">printf</a>("Quelle est ton adresse:");
            scanf("%s",chaine);
            <a href="http://man.developpez.com/man3/printf.3.php" target="_blank">printf</a>("\nvoici ton adresse:%s\n",chaine);

    jusque la tout va bien ...
    le programme demande de rentrer une adresse,genre je met "RUE DU PARADIS"

    mais quand il affiche l'adresse il met juste "RUE" scanf à stopper la lecture à partir de l'espace

    comment fait ton pour mémomoriser une chaine avec des espaces??

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    fgets
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  3. #3
    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
    Points : 6 498
    Points
    6 498
    Par défaut
    scanf est sûrement l'une des fonctions les plus difficiles à utiliser.
    Comme le dit skyrunner, utilise
    fgets(buf, sizeof(buf), stdin);
    buf désinge le buffer où sera rangée ta saisie.
    stdin désigne l'entrée standart.
    A noter qu'à la fin de la saisie le '\n' sera resté dans le buffer.
    Le traitement typique de la saisie se fait par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    char *p;
    char buf[256);
    fgets(buf, sizeof(buf, stdin);
    if ((p = strchr(buf, '\n') != NULL)
    {
      // ici on a trouve le '\n', on le vire
      *p = 0;
    }
    else
    {
      // ici ton buffer est trop petit
      // à toi de voir ce que tu veux faire
    }
    "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

  4. #4
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 7
    Points : 9
    Points
    9
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char chaine[100]="";
    printf("Quelle est ton adresse:");
    scanf("%s",&chaine);
    printf("\nvoici ton adresse:%s\n",chaine);
    ca marchera peut etre mieux.....(pas convaincu parce que scanf est une fonction assez difficile a utiliser.)

  5. #5
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par togzz
    char chaine[100]="";
    scanf("%s",&chaine);
    C'est la meme chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaine = &chaine = &chain[0]
    Software Failure. Press left mouse button to continue.
    Guru Meditation #0100000C.000FE800

  6. #6
    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
    Points : 6 498
    Points
    6 498
    Par défaut
    scanf("%s",&chaine);
    Absurdité

    puisque chaine est un tableau de caractères
    chaine = &chaine[0].
    "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

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par crocodilex
    C'est la meme chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaine = &chaine = &chain[0]
    En dehors de la faute de frappe, c'est partiellement faux. chaine == &chaine[0], OK. Mais &chaine, c'est autre chose.

    Tu confonds l'adresse d'un tableau et l'adresse de son premier élément...

    Il se peut que la valeur soit la même, (peu importe), mais le type est différent .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    int main (void)
    {
       char chaine[12];
       char *pa = chaine; /* OK */
       char *pb = &chaine[0]; /* OK */
       char *pc = &chaine; /* Warning */
       char (*pd)[10] = &chaine; /* Warning */
       char (*pe)[12] = &chaine; /* OK */
     
       return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    main.c:7: warning: initialization from incompatible pointer type
    main.c:8: warning: initialization from incompatible pointer type
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Tu confonds l'adresse d'un tableau et l'adresse de son premier élément...
    Il se peut que la valeur soit la même, (peu importe), mais le type est différent .
    Entièrement d'accord avec toi. Je n'avais pas poussé le raisonnement aussi loin.

    Mais est-ce que tu penses que cette valeur peut être différente (pour des questions d'alignement) ?

    PS : Tu as oublié le "return 0".
    Software Failure. Press left mouse button to continue.
    Guru Meditation #0100000C.000FE800

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par crocodilex
    Mais est-ce que tu penses que cette valeur peut être différente (pour des questions d'alignement) ?
    Non. Elle est garantie. Par contre le raisonnement est faux et serait catastrophique avec un pointeur à la place d'un nom de tableau.
    PS : Tu as oublié le "return 0".
    Ce code n'est pas destiné à être exécuté, mais simplement compilé...

    De plus, pas obligatoire en C99, mais OK, je corrige pour être compatible C90.
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/04/2012, 00h20
  2. [XL-2003] feuille verouillé pour les utilisateurs pas pour les macro
    Par nemoc dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/07/2009, 11h00
  3. Pour les Debutants
    Par SeleKta dans le forum C
    Réponses: 3
    Dernier message: 21/12/2006, 13h10
  4. Dev C++ (Bien seulement pour les debutants)?
    Par Frazeks dans le forum Dev-C++
    Réponses: 3
    Dernier message: 20/09/2005, 13h41

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