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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    Invité(e)
    Invité(e)
    Par défaut f
    qu est ce que tu veut dire pas depassement de memoire

  4. #4
    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

  5. #5
    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?

  6. #6
    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)

  7. #7
    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

  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 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 */

  9. #9
    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.

  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 seriousme
    A moins de rentrer 0.
    Comment tu fais ?

  11. #11
    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 Emmanuel Delahaye
    Comment tu fais ?
    Excellente question, je ne sais pas si il est possible d'écrire sur le flux "stdin" directement.

  12. #12
    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 seriousme
    Excellente question, je ne sais pas si il est possible d'écrire sur le flux "stdin" directement.
    Peut être en redirigeant depuis un fichier texte contenant un 0...

  13. #13
    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.

  14. #14
    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...

  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 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"

  16. #16
    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, 20h09
  2. La difference entre XSL et XSLT?
    Par pantin dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 27/06/2003, 15h14
  3. Difference entre fenetre et boite de dialog
    Par billyboy dans le forum Windows
    Réponses: 2
    Dernier message: 02/06/2003, 15h43
  4. [] Difference entre MSHFlexGrid et MSFlexGrid
    Par olivierx dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 23/04/2003, 08h48
  5. Difference entre types d'Adresse IP
    Par freud dans le forum Développement
    Réponses: 3
    Dernier message: 02/03/2003, 02h06

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