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 :

Formater une chaine de caractères contenant des formateurs


Sujet :

C

  1. #1
    Membre extrêmement actif
    Avatar de benjani13
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Février 2010
    Messages
    615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en sécurité

    Informations forums :
    Inscription : Février 2010
    Messages : 615
    Points : 2 826
    Points
    2 826
    Par défaut Formater une chaine de caractères contenant des formateurs
    Bonsoir, je vous explique mon problème. J'ai un tableau de string, contenant les différents messages affichables à l’utilisateur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    static char* message_resultat[] = {"\nLa surface du carre est de %fcm2\n\n",
                                       "\nLa surface du carre est de %fcm2\n\n",
                                       "\nLa surface du rectangle est de %fcm2\n\n",
                                       "\nLa surface de la sphere est de %fcm2\n\n",
                                       "\nLe volume du carre est de %fcm3\n\n",
                                       "\nLe volume du rectangle est de %fcm3\n\n",
                                       "\nLe volume de la sphere est de %fcm2\n\n",
                                       "\nLe volume du cylindre est de %fcm3\n\n"};
    Est-ce possible d'afficher ces chaines en prenant en compte les formateurs %f? J'ai essayé de bidouiller en faisant ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char resultat[100];
    float surface = 42.0;
     
    sprintf(resultat, message_resultat[0], surface);
     
    printf(resultat);
    Mais sa m'affiche parfois "La surface du carre est de 0.0000cm2", parfois un nombre énorme.

    Avez-vous une solution? Merci!

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Le problème vient d'ailleurs.

    On ne peut pas t'aider, si tu ne nous fournis pas le code qui provoque le problème.

  3. #3
    Membre extrêmement actif
    Avatar de benjani13
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Février 2010
    Messages
    615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en sécurité

    Informations forums :
    Inscription : Février 2010
    Messages : 615
    Points : 2 826
    Points
    2 826
    Par défaut
    Désolé pour le temps de réponse, je n'étais pas chez moi. Voici mon code entier:

    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
    16
    17
    18
    //constantes.h
    #ifndef DEF_CONSTANTES
    #define DEF_CONSTANTES
     
            #define TAILE_MAX          10.0
            #define CARRE              1
            #define RECTANGLE_SURFACE  2
            #define TRIANGLE           3
            #define SPHERE_SURFACE     4
            #define CUBE               5 
            #define RECTANGLE_VOLUME   6
            #define SPHERE_VOLUME      7
            #define CYLINDRE           8
            #define SORTIE             9
     
            #define NBR_CHOIX sizeof(menu) / sizeof(menu[0])
     
    #endif
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    //fonctions.c
    #include <stdlib.h>
    #include <stdio.h>
    #include "constantes.h"
    #include "fonctions.h"
     
    static char* message_invite[] = {"\nEntrez la taille d'un des cotes:",
                                     "\nEntrez la taille des deux cotes:",
                                     "\nEntrez la taille de la base et de la hauteur du triangle:",
                                     "\nEntrez le rayon de la sphere:",
                                     "\nEntrez la taille d'un des cotes:",
                                     "\nEntrez la taille des trois cotes:",
                                     "\nEntrez le rayon de la sphere:",
                                     "\nEntrez le rayon du cylindre et sa hauteur:",
                                     "\nAu revoir\n\n"};
     
    static char* message_resultat[] = {"\nLa surface du carre est de %.4fcm2\n\n",
                                       "\nLa surface du rectangle est de %.4fcm2\n\n",
                                       "\nLa surface du triangle est de %.4fcm2\n\n",
                                       "\nLa surface de la sphere est de %.4fcm2\n\n",
                                       "\nLe volume du carre est de %.4fcm3\n\n",
                                       "\nLe volume du rectangle est de %.4fcm3\n\n",
                                       "\nLe volume de la sphere est de %.4fcm2\n\n",
                                       "\nLe volume du cylindre est de %.4fcm3\n\n"};
     
     
    void gestion_choix(int choix)
    {
        char resultat[100];
        float surface = 42.0;
     
        printf(message_invite[choix - 1]);
     
        if(choix != SORTIE)
        {
            sprintf(resultat, message_resultat[choix - 1], surface);
     
            printf(resultat);
        }
    }
    Ce code marche finalement. Je ne vois pas ce qui n'allait pas par contre...

  4. #4
    Membre éprouvé Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Points : 997
    Points
    997
    Par défaut
    Bonsoir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #line 16 "constantes.h"
            #define NBR_CHOIX sizeof(menu) / sizeof(menu[0])
    Pour le cas où tu n'en serais pas conscient, si menu est alloué dynamiquement, ce code ne fonctionnera pas comme tu le souhaites.
    Il faut impérativement que ce soit un tableau statique (TYPE menu[] = { ... };).
    F.A.Q. C

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #line 36 "fonctions.c"
            sprintf(resultat, message_resultat[choix - 1], surface);
     
            printf(resultat);
    C'est vraiment utile de passer par une variable annexe ?
    Si tu n'as besoin du contenu de cette chaîne nulle part ailleurs, affiche directement le résultat sur la sortie standard.

  5. #5
    Membre extrêmement actif
    Avatar de benjani13
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Février 2010
    Messages
    615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en sécurité

    Informations forums :
    Inscription : Février 2010
    Messages : 615
    Points : 2 826
    Points
    2 826
    Par défaut
    Merci pour tes précisions Steph.

    Citation Envoyé par Steph_ng8 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #line 16 "constantes.h"
            #define NBR_CHOIX sizeof(menu) / sizeof(menu[0])
    Pour le cas où tu n'en serais pas conscient, si menu est alloué dynamiquement, ce code ne fonctionnera pas comme tu le souhaites.
    Il faut impérativement que ce soit un tableau statique (TYPE menu[] = { ... };).
    F.A.Q. C
    C'est mon prof de C qui nous a donné ça pour avoir la taille du tableau, je me doutais bien que ça ne marcherait pas dans tous les cas.

    Citation Envoyé par Steph_ng8 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #line 36 "fonctions.c"
            sprintf(resultat, message_resultat[choix - 1], surface);
     
            printf(resultat);
    C'est vraiment utile de passer par une variable annexe ?
    Si tu n'as besoin du contenu de cette chaîne nulle part ailleurs, affiche directement le résultat sur la sortie standard.
    Effectivement! Je devais être fatigué

Discussions similaires

  1. [MySQL] Affichage d’une chaîne de caractères contenant des parenthèses
    Par mathiotp dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/11/2007, 21h31
  2. Tri sur une chaîne de caractères contenant des nombres
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/05/2006, 12h52
  3. Réponses: 4
    Dernier message: 18/05/2006, 16h54
  4. Réponses: 3
    Dernier message: 01/02/2006, 19h26
  5. Réponses: 2
    Dernier message: 06/12/2002, 08h50

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