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 :

texte avec variable dans messageBox


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    Janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut texte avec variable dans messageBox
    bonjour,
    comme dit dans le titre, j'essaie d'inclure une variable dans le text d'une messageBox en langage c avec la bibli windows.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    MessageBox(NULL, TEXT("Pas fait la vaisselle pendant %f jours.\n", duree/86400), TEXT("Message"), MB_OK);
    // ca marche pas
    // alors j'ai créé une variable 
    char message[40];
    // puis j'ai fait 
    sprintf(message, "Pas fait la vaisselle pendant %f secondes.\n", &duree_tm);
    MessageBox(NULL, TEXT("& message &"), TEXT("Message"), MB_OK);
    // mais le message qui s'affiche c'est : & message &
    j'aurai bien voulu utiliser messageBox de Windows car ca m'évite de développer en SDL et de creer une fenetre pour afficher le message contenant la variable.
    c'est faisable ou pas ? s'il y a un autre moyen simple je suis preneur aussi
    merci de votre patience avec moi ;o))

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 713
    Points : 2 361
    Points
    2 361
    Par défaut
    Bonjour.

    La méthode avec sprintf fonctionne, mais tu demandes à MessageBox d'afficher le texte "& message &" au lieu de ta variable message.

    MessageBox(NULL, message, TEXT("Message"), MB_OK); devrait fonctionner mieux

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Attention, char message[40]; risque de ne pas être assez : la chaine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Pas fait la vaisselle pendant %f secondes.\n"
    compte déjà 44 caractères.

    Le & devant duree_tm est aussi de trop. Ici on veut juste sa valeur, et non son adresse pour pouvoir la modifier lors d'une saisie par exemple avec scanf.

  4. #4
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    Janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut
    bonjour et merci Manudiclemente et Winjerome.
    j'ai fait vos 2 modifs,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char message [100];
    sprintf(message, "Pas fait la vaisselle pendant %f secondes.\n", duree_tm);
    	MessageBox(NULL, message, TEXT("Message"), MB_OK);
    mais ca m'affiche des caractères incompréhensibles (genre hiéroglyphes)
    et à la fermeture du programme j'ai l'alerte : Run-Time Check Failure #2 - Stack around the variable 'message' was corrupted.

    ...
    et j'ai l'erreur suivante :
    1 IntelliSense*: l'argument de type "char *" est incompatible avec le paramètre de type "LPCWSTR" c:\users\admin\documents\visual studio 2010\projects\calendrier\calendrier\main.c 130
    (la ligne 130, c'est : MessageBox(NULL, message, TEXT("Message"), MB_OK);

  5. #5
    Invité
    Invité(e)
    Par défaut
    Tu dois compiler en Unicode, il te faut alors utiliser des wide char wchar_t à la place des char. On utlise alors swprintf à la place de sprintf, qui prend un argument supplémentaire : la taille maximale (qui t'évitera le genre de débordement que je t'ai fait remarquer )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    wchar_t message [100];
    swprintf(message, 100, L"Pas fait la vaisselle pendant %f secondes.\n", duree_tm);

  6. #6
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    Janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut
    oui, Winjerome tu as raison, cela marche maintenant !
    mais pourquoi je compile en unicode ? ce n'est pas mon choix ! j'utilise VisualStudio 2010 et je compile avec ses optionspar défaut, je n'ai rien changé
    merci encore à vous 2

  7. #7
    Invité
    Invité(e)
    Par défaut
    Cela fait justement parti des paramètres par défaut.
    Si tu souhaites le supprimer : va dans les propriétés du projet > Propriétés de configuration > Général > Jeu de caractères > Non défini.

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    En fait, on est censé utiliser des TCHAR:

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <windows.h>
    #include <stdio.h>
    #include <tchar.h>
     
    ...
     
    TCHAR message[100];
    _tstprintf(message, TEXT("Pas fait la vaisselle pendant %f secondes.\n"), duree_tm);
    MessageBox(NULL, message, TEXT("Message"), MB_OK);

  9. #9
    Invité
    Invité(e)
    Par défaut
    Effectivement, si l'on ne veut pas s'embêter avec l'un ou l'autre.

    Par contre, il me semble que tu as un t en trop :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _tstprintf(message, TEXT("Pas fait la vaisselle pendant %f secondes.\n"), duree_tm);
    ou plus sécurisant en gardant la taille maximale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _sntprintf(message, 100, TEXT("Pas fait la vaisselle pendant %f secondes.\n"), duree_tm);

  10. #10
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    Janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut
    merci beaucoup, à vous tous pour votre aide.
    Winjerome, j'ai remis le code d'origine et suis passé en jeu de caractères non defini et ca marche impeccablement
    merci Menidoc, j'ai testé mais effectivement cela ne marchait pas (avec le "t" en trop, et je ne trouvais pas de doc sur _tstprintf...
    bon en fait on se retrouve maintenant avec plusieurs solutions qui marchent,
    ce que je cherche avant tout c'est à faire simple avec le plus possible de fonctions basiques et connues du débutant...
    dans ce registre la solution initiale avec sprintf me plait bien, mais en quoi cela me pénalise (ou non de compiler en jeu de caractères non spécifié, ou en unicode, ou autre... par exemple utf8 que je ne vois pas en option mais que je connais par la création de sites web

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Oups.

    ↑↑Attention, la version microsoft de _sntprintf() se comporte comme strncpy(), il faut terminer le buffer soi-même:

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TCHAR message[100];
    _sntprintf(message, 100, TEXT("Pas fait la vaisselle pendant %f secondes.\n"), duree_tm);
    message[100-1] = TEXT('\0');
    MessageBox(NULL, message, TEXT("Message"), MB_OK);

  12. #12
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    Janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut
    merci Medinoc,
    ces fonctions _stprintf _sntprintf ou sont spécifiques Windows ? j'ai cru lire que oui.
    pourquoi ne pas tout bêtement compiler en jeu de caractères non défini plutôt que unicode ?
    quel est l’inconvénient sachant que je ne fais que de petits programmes plutôt simplets
    merci à tous pour votre aide

  13. #13
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    Janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut
    bonjour,
    ne m'en veuillez pas d'insister, mais je voudrais comprendre s'il y a un réel problème ou au contraire un avantage à compiler en jeu de caractères non défini (j'ai commencé et j'avoue que cela me simplifie la vie et surtout les lignes de codes)
    merci de votre aide
    Amicalement
    Lucky

  14. #14
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 713
    Points : 2 361
    Points
    2 361
    Par défaut
    Bonsoir.

    Je ne connais trop Visual Studio, mais je présume que « jeu de caractère non défini » signifie utiliser l'encodage ASCII.
    Si c'est le cas, cocher cette option revient à, comme tu t'en est rendu compte, grandement simplifier le code. En contrepartie, tu ne pourras pas utiliser de chaînes avec des caractères spéciaux (autres alphabets, caractères spéciaux, flèches, etc…) mais seulement les 52 lettres latines, les 10 chiffres et quelques signes de ponctuation (et possiblement quelques accents).

    Cela dit peut-être je me trompe, quelqu'un qui si connaît t'en dira certainement plus.

  15. #15
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    Janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut
    merci manudiclemente,
    ben non, je viens de tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sprintf(message, "Pas fait la fête pendant %d secondes.\n", (int)duree);
    	MessageBox(NULL, message, TEXT("Message"), MB_OK);
    et ça m'écrit bien "fête" dans ma messageBox sur Visual studio compilé avec "jeu de caractères non défini...
    Alors ? la vie est belle ?

  16. #16
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 713
    Points : 2 361
    Points
    2 361
    Par défaut
    C'est parce que Windows utilise l'encodage ISO 8859-15 qui permet d'écrire du français sans soucis.

    Mais comme je le disais, d'autres caractères ne s'afficheront pas avec cet encodage.

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

Discussions similaires

  1. Boucle for avec variable dans le texte
    Par Alplob dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 21/06/2011, 10h33
  2. Réponses: 9
    Dernier message: 23/08/2010, 14h41
  3. placer dans une texbox du texte avec variable
    Par flamel dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/03/2010, 21h15
  4. [AS2] Pb avec variables dans syntaxe
    Par ooyeah dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 05/07/2005, 11h28

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