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 :

difference entre %c et %s


Sujet :

C

  1. #1
    Invité(e)
    Invité(e)
    Par défaut difference entre %c et %s
    bonjour
    quel est la difference entre %s et %c
    dans le scanf
    char c;
    (ex: scanf("%c",&c");
    scanf("%s",&c");

  2. #2
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char c;
    scanf ("%s", &c);
    provoque un depassement de memoire.

  3. #3
    Membre chevronné Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Par défaut
    %s pour lire une chaîne.
    %c pour lire un caractère.

    Citation Envoyé par brakeche
    scanf("%s",&c");
    Donc, comprends ton erreur ici.

  4. #4
    Invité(e)
    Invité(e)
    Par défaut f
    qu est ce que tu veut dire pas depassement de memoire

  5. #5
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Jveux dire que quand tu donnes un specificateur %s, il faut prevoir une zone suffisament grande pour que scanf puisse y stoquer tous les caracteres de la chaine saisie (+ le caractere nul)
    En l'occurence, "c" ne tient que sur 1 caractere, donc scanf va commencer à ecrire à l'adresse de c puis va continuer dans la memoire en faisant n'importe quoi

  6. #6
    Invité(e)
    Invité(e)
    Par défaut dd
    moi dans mon programme j'utilise une variable c pour faire un test
    car c l'utilisateur qui entre o( oui) s'il veut continuer ou n sil veut arreter
    donc j'utilise quoi?

  7. #7
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Alors, utilise
    Attention, ici c est un int (fgetc retourne int)

  8. #8
    Membre confirmé Avatar de lucky31
    Inscrit en
    Mai 2006
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 239
    Par défaut
    Citation Envoyé par Gruik
    Alors, utilise
    Attention, ici c est un int (fgetc retourne int)
    tu veux bien m'expliquer le comportement de cette fonction dans le code

  9. #9
    Membre confirmé Avatar de FidoDido®
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 101
    Par défaut
    cf. man fgetc

    fgetc lit un caractère dans le FILE * donné en argument et renvoie son code ASCII en sortie.
    S'il y a erreur ou si la fin du fichier est atteinte, il renvoie EOF.

  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 : 69
    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 Gruik
    Alors, utilise
    Attention, ici c est un int (fgetc retourne int)
    Pas suffisant. Pour un "o/n", il faut taper
    o<enter> ou n<enter>. Il faut donc 2 lectures, sinon, on se retrouve encore avec le problème du stdin non vide.

    C'est pourquoi je préconise dans tous les cas d'utiliser fgets(), comme expliqué ici :

    http://emmanuel-delahaye.developpez....tes.htm#saisie
    http://emmanuel-delahaye.developpez....s.htm#fichiers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       char line [4];
       fgets(line, sizeof line, stdin);
       c = line[0]; /* ou *line */

  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 : 69
    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 lucky31
    tu veux bien m'expliquer le comportement de cette fonction dans le code
    http://emmanuel-delahaye.developpez.com/notes.htm#fgetc

  12. #12
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Pas suffisant. Pour un "o/n", il faut taper
    o<enter> ou n<enter>. Il faut donc 2 lectures, sinon, on se retrouve encore avec le problème du stdin non vide.
    Au temps pour moi.

    Dans ce cas la, il peut rester avec son scanf("%c", &c);
    ça sera ptet plus simple

  13. #13
    Membre émérite
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Par défaut
    Citation Envoyé par Gruik
    Au temps pour moi.

    Dans ce cas la, il peut rester avec son scanf("%c", &c);
    ça sera ptet plus simple
    Ben non, ce sera le même problème...
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  14. #14
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Oui, il faut toujours appuyer sur O ou N + entrée mais yaura pas à vider stdin (enfin j'espere)

  15. #15
    Membre émérite
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Par défaut
    Citation Envoyé par Gruik
    Oui, il faut toujours appuyer sur O ou N + entrée mais yaura pas à vider stdin (enfin j'espere)
    S'il veut faire des E/S par la suite, si, c'est inévitable.
    De toute façon, on fait toujours place nette lorsqu'on joue avec sdtin.
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  16. #16
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Ok, désolé

  17. #17
    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 brakeche
    bonjour
    quel est la difference entre %s et %c
    dans le scanf
    char c;
    (ex: scanf("%c",&c");
    scanf("%s",&c");
    Comment tu fait tes scanf toi?
    moi je fait plutot:Efin je pensse que c'est un erreur de phape...

  18. #18
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    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
    E]n[fin je pens[s]e que c'est un erreur de [ph]fr[ap]p[e...
    "Prenez le temps d'aller lentement..."

    Comme disait mon grand-père qui était toujours à l'heure :

    "Quand tu es pressé, va lentement"

  19. #19
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Citation Envoyé par Gruik
    bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char c;
    scanf ("%s", &c);
    provoque un depassement de memoire.
    A moins de rentrer 0.

  20. #20
    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
    "Quand tu es pressé, va lentement"
    Et comment j'arrive a l'heure?

Discussions similaires

  1. Différences entre Delphi et Visual Basic ?
    Par Anonymous dans le forum Débats sur le développement - Le Best Of
    Réponses: 75
    Dernier message: 30/03/2009, 21h09
  2. La difference entre XSL et XSLT?
    Par pantin dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 27/06/2003, 16h14
  3. Difference entre fenetre et boite de dialog
    Par billyboy dans le forum Windows
    Réponses: 2
    Dernier message: 02/06/2003, 16h43
  4. [] Difference entre MSHFlexGrid et MSFlexGrid
    Par olivierx dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 23/04/2003, 09h48
  5. Difference entre types d'Adresse IP
    Par freud dans le forum Développement
    Réponses: 3
    Dernier message: 02/03/2003, 03h06

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