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 :

utilisation de scanf


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 11
    Par défaut utilisation de scanf
    Bonsoir,

    J'essaie de bien comprendre comment fonctionne scanf et j'ai un petit souci avec le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    main()
    {	
    	fflush(stdin);
    	int n_car=0;		
    	char n[10]={'a','z','e','r','t','y','a','b','c','\0'};
    	scanf("%[0123456789]%n",n,&n_car);
    	int i = 0;	
    	for(i=0;i<10;i++) printf("%c",n[i]);
    	printf("\n n_car=%d\n",n_car);	
    	return 0;
    }
    Lorsque j'entre un caractère, par exemple 0, à l'affichage de la chaîne, il me manque un caractère.
    Par exemple j'entre "1" pour le scanf et le printf me renvoie:
    "1ertyabc" c'est à dire qu'il me "mange" le z.
    Pourtant je vérifie le nb de caractère lus, et dans l'exemple j'ai bien 1 caractère lu.

    Savez-vous pourquoi ?

    Merci d'avance !

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Parce que le format %[] ne lit pas un caractère, mais une chaine de caractères, donc rajoute le caractère de fin de chaîne ('\0') à la suite. Si il lit une chaine de 1 caractère, il en place en fait 2 dans le tableau.

    fflush(stdin);
    fflush() a un comportement indéfini lorsqu'il s'agit d'un flux d'entrée et ne doit être utilisé que pour des flux de sortie comme stdout.

    char n[10]={'a','z','e','r','t','y','a','b','c','\0'};
    s'écrit aussi
    char n[10]= "azertyabc";

  3. #3
    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 diogene Voir le message
    char n[10]={'a','z','e','r','t','y','a','b','c','\0'};
    s'écrit aussi
    char n[10]= "azertyabc";
    ou

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 11
    Par défaut
    Je reviens un peu tard...

    merci beaucoup pour vos réponses.

    Bonne soirée et bonnes pâques.

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

Discussions similaires

  1. Utilisation de scanf
    Par dimflim dans le forum Débuter
    Réponses: 8
    Dernier message: 30/09/2011, 17h06
  2. Réponses: 10
    Dernier message: 22/10/2010, 18h37
  3. [Débutant(e)] Comment utiliser Scanf.sscanf
    Par bumbolol dans le forum Caml
    Réponses: 2
    Dernier message: 02/02/2009, 16h04
  4. scanf : utilisation dans une boucle de saisie
    Par kromartien dans le forum Bibliothèque standard
    Réponses: 4
    Dernier message: 03/12/2007, 23h50
  5. comment utiliser scanf proprement
    Par Eusebius dans le forum C
    Réponses: 8
    Dernier message: 20/09/2006, 10h09

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