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 :

les caractères en c !


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 59
    Par défaut les caractères en c !
    bonjour,
    dans certain programme j'utilise ces deux codes pour traiter le cas du caractère
    mais je ne sais bien les differance meme comment
    le traitement se fait .
    pourquoi on teste scanf avec la valeur 1 !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int main (void)
    {
      int nb;
      printf ("Entrez un nombre entier : ");
      if (scanf ("%d", &nb) != 1)
        return -1;
     
    /* Inserez votre code ici */
     
      return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include <stdio.h>
    int main (void)
    {
    	int nb;
    	printf ("Entrez un nombre entier : ");
    	scanf ("%d", &nb);
    	fflush(stdin);
    	return 0;
    }
    aidez moi a comprendre svp !

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut



    Citation Envoyé par Dr walid Voir le message
    pourquoi on teste scanf avec la valeur 1 !
    Alors ca je ne sais pas, je testerais plutôt de cette façon moi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      if (scanf ("%d", &nb) <= 0)
        return -1;
    (ou éventuellement une valeur inférieure à celle attendue) car d'après le man :
    Ces fonctions renvoient le nombre d'éléments d'entrées correctement assignés. Ce nombre peut être plus petit que le nombre d'élements attendus, et même être nul, s'il y a une erreur de mise en correspondance. La valeur zéro indique qu'aucune conversion n'a été faite bien que des caractères étaient disponibles en entrée. Typiquement c'est un caractère d'entrée invalide qui en est la cause, par exemple un caractère alphabétique dans une conversion `%d'. La valeur EOF est renvoyée si une erreur d'entrée a eu lieu avant toute conversion, par exemple une fin de fichier. Si une erreur fin-de-fichier se produit après que les conversions aient commencé, le nombre de conversions réussies sera renvoyé.
    Cela dit je n'ai jamais utilisé cette fonction, j'ai plutôt tendance à utiliser fgets puis à faire les conversions qui s'imposent quand cela est nécessaire

    Sinon pour ton second code, sache que fflush n'est utilisé que pour les flux sortant soit stdout et stderr. Voir les différentes entrées à ce sujet sur notre FAQ


    J"espère avoir pu au moins t'aider un peu
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    scanf retourne le nombre de parametre qu'elle a pu correctement saisir.

    Dans ce cas ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int main (void)
    {
      int nb;
      printf ("Entrez un nombre entier : ");
      if (scanf ("%d", &nb) != 1)
        return -1;
     
    /* Inserez votre code ici */
     
      return 0;
    }
    Si l'utilisateur saisie un caractere au lieu d'un int, scanf va retourner 0. C'est une saisie securisé de scanf au contraire du deuxieme qui n'est pas securiser.

    Cependant, scanf, comme le signifie le f, est une fonction destiné a recevoir une entré formaté, c'est a dire sur.
    Or, la saisie d'un utilisateur est tout sauf formaté.

    Il vaudrai mieux se diriger vers d'autre type de saisie (getchar, gets, getc, ...)



    EDIT : Grilled By Franck.h

  4. #4
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Pour le <= 0 c'est bien si tu utilises un seul formateur. Mais si tu en utilises plusieurs ça ne sera pas forcement adapté
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void) {
    	int jour, mois, annee;
    	/* Vérifie si l'entrée est de la forme J/M/A */
    	if (scanf("%d/%d/%d", &jour, &mois, &annee) != 3) {
    		printf("Saisie incorrecte");
    		return EXIT_FAILURE;
    	}
    	printf("Jour: \t\t%d\n"
    		   "Mois: \t\t%d\n"
    		   "Annee: \t%d\n", jour, mois, annee);
    	return EXIT_SUCCESS;
    }
    Si j'avais mis <= 0 l'utilisateur aurait très bien pu entrer 1, 2 ou 3 paramètres

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Pouet_forever Voir le message
    Si j'avais mis <= 0 l'utilisateur aurait très bien pu entrer 1, 2 ou 3 paramètres
    Oui exact, après lecture et relecture de la description de la fonction, je me rend compte de ma petite erreur cela dit, j'ai bien précisé que je n'avais jamais utilisé cette fonction
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 59
    Par défaut
    merci maintenant je comprend bcp

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

Discussions similaires

  1. [C#][ADO] Enlever les caractère spéciaux
    Par Oberown dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/01/2005, 18h38
  2. [Jsp] Supprimer les caractère spéciaux d'une chaine
    Par PeteMitchell dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 13/05/2004, 11h11
  3. Réponses: 7
    Dernier message: 12/05/2003, 22h50
  4. Traiter les caractères spéciaux
    Par ricola dans le forum Langage
    Réponses: 2
    Dernier message: 20/02/2003, 09h23
  5. [PostgreSQL] Les caractères accentués ?
    Par yacomor dans le forum Requêtes
    Réponses: 2
    Dernier message: 18/02/2003, 16h30

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