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 :

Probleme avec sprintf et affichage?


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Points : 38
    Points
    38
    Par défaut Probleme avec sprintf et affichage?
    Bonjour,

    encore moi et mes questions....

    Je cherche a afficher une valeur sur un graphique que je crée.

    Cette valeur est située sur la derniere ligne d'un .txt .

    Le .txt est de la forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    0.0005   9    11   1   0   2   0   4   3   12
    0.0005  65    254  2   5   4   6   0   1   9
    5456

    Et mon code est de la forme:

    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
     
    void Drawing()
    {
    ///blablabla
    char * average ="HELLO";
     
    while(!ReadTable.eof
    	{ 
    		double Temps;
    		ReadTable>> Temps;
    		SelectObject(hdc,hp1px);
     
    		if ( ReadTable.eof())
    		{ 
    			SelectObject(hdc,hp1px);
     
    			sprintf(average, "Average of the Maximum of the Pulse:  %lf",Temps);
    			TextOut (hdc,10,650,average,lstrlen(average));
    			//TextOut (hdc,10,650,"ahahah",5);
    		}	
     
    ///blablablablabla
     
     
    	}
    	SelectObject(hdc,hpOld);
    }

    Et bien j'ai une boite de dialogue avec un gros signe : rond rouge avec croix blanche dedans.... qui dis en gros que "written" n'a pu pu etre executé sur le mémoire.. ou qqch dans le genre, j'ai traduis..

    TextOut (hdc,10,650,"ahahah",5); c'est pour faire un test... si je n'ai pas les deux lignes au dessus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sprintf(average, "Average of the Maximum of the Pulse:  %lf",Temps);
    TextOut (hdc,10,650,average,lstrlen(average));
    Si je n'ai que :

    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
     
    void Drawing()
    {
    ///blablabla
    char * average ="HELLO";
     
    while(!ReadTable.eof
    	{ 
    		double Temps;
    		ReadTable>> Temps;
    		SelectObject(hdc,hp1px);
     
    		if ( ReadTable.eof())
    		{ 
    			SelectObject(hdc,hp1px);
     
    			TextOut (hdc,10,650,"ahahah",5);
    		}	
     
    ///blablablablabla
     
     
    	}
    	SelectObject(hdc,hbrOld);
    	SelectObject(hdc,hpOld);
    }

    ca fonctionne...


    Help...

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    1/ Ce n'est pas ainsi qu'on fait des lectures: on tente la lecture et ensuite on vérifie si elle a échoué.

    La manière idiomatique, c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while (ReadTable >> Temps) {
       // lecture bien faite
    }
    // la lecture a échoué
    if (ReadTable.bad()) {
       // erreur d'IO
    } else if (ReadTable.eof()) {
       // fin de fichier -- il y a peut-être aussi une erreur de formatage,
       // mais c'est impossible à savoir
    } else {
       // erreur de formatage
    }
    2/ Utilise les stringstream plutôt que sprintf. Si tu veux utiliser sprintf, écrit dans de la mémoire allouée plutôt qu'essayer d'écraser une chaîne littérale (et attention au dépassement de capacité de la mémoire allouée; snprintf est souvent disponible et plus sûr).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Points : 38
    Points
    38
    Par défaut
    Euh non mais je me suis mal exprimé peut etre... la c'est juste pour lire la derniere ligne, bien sur que apres j'ai du code qui me permet de lire les lignes les unes apres les autres et de tester si la lecture fonctionne ou pas... quand meme mais bon je ne voulais pas embrasser avec tout mon code...

    je vais aller voir stringstream et snprintf..

  4. #4
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Points : 38
    Points
    38
    Par défaut
    et bien avec snprintf j'ai comme erreur: identifier not found, even with argument-dependent lookup...

    un #include manquant?

    hum et stringstreasm j'ai essayé mais je dois pas savoir faire:

    j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    std::stringstream average;
    average << "Average of the Maximum of the Pulse:   " << Temps;
    TextOut(hdc,10,650,average.str(),15);
    Mais en fait mon parametre 4 de Textout n'est pas au bon format...

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    average.str().c_str(), puisque tu veux un const char*.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Points : 38
    Points
    38
    Par défaut
    Merciiiiiiiiiiiiiiii

    ah encore un ptit soucis....je mets quoi en parametre 5 de TextOut... parceque si je mets une valeur comme 150 pour etre large... j'ai plein de signes bizarres qui apparaissent apres mon texte....

    et si je mets sizeof(average.str().c_str()), ca me donne Aver comme texte affiché...

    et si je mets sizeof(average.str()), ca me donne Average of the Maximum of th comme texte affiché...

    et si je mets sizeof(average), ca me donne mon texte plus des lettres bizarre a l'infini j'ai l'impression..

  7. #7
    Membre régulier Avatar de gelam
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2003
    Messages : 69
    Points : 74
    Points
    74
    Par défaut
    average.str().length()
    Avez-vous remarqué les progrès que fait l'ignorance?
    [Tristan Bernard ]

  8. #8
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Points : 38
    Points
    38
    Par défaut
    marche pas... ca m'affiche Aver

  9. #9
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Points : 38
    Points
    38
    Par défaut
    des idées?

  10. #10
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Points : 38
    Points
    38
    Par défaut
    un pti up hein m'en voulez pas mais ca me coince un peu ce ptit probleme sans doute bete

  11. #11
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Points : 38
    Points
    38
    Par défaut
    En ce lundi tous mes autres problèmes résolus mais pas celui là.....

  12. #12
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par nanettemontp Voir le message
    marche pas... ca m'affiche Aver
    Ca veut dire que ton string est vu comme ayant que 4 caractères alors que tu as fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    average << "Average of the Maximum of the Pulse:   " << Temps;
    Tu dois sûrement avoir mal compris ou mis en oeuvre ce que Laurent Gomila t'as dit. Fais voir la nouvelle forme de ton TextOut?
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  13. #13
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Points : 38
    Points
    38
    Par défaut
    hello,

    voici ce que j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    std::stringstream average;
    average << "Average of the Maximum of the Pulse:  " << Temps<< "  A   ";
    TextOut (hdc,300,720, average.str().c_str(),sizeof(average.str().c_str()));

  14. #14
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sizeof(average.str().c_str())
    taille du pointeur.

    taille de la chaine.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  15. #15
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Points : 38
    Points
    38
    Par défaut
    tout simplement merci!!

    j'avais essayé avec size() mais j'avais betement gardé sizeof(....) devant..
    youhhhhouuuuuh



  16. #16
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Tu n'as donc effectivement pas bien interprété ce que gelam t'a dit. Il faut que tu mettes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    std::stringstream average;
    average << "Average of the Maximum of the Pulse:  " << Temps<< "  A   ";
    TextOut (hdc,300,720, average.str().c_str(),average.str().length()); // ou .size()
    La différence entre les deux vient de t'être expliquée par Jean-Marc.
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  17. #17
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Points : 38
    Points
    38
    Par défaut
    oui merci merci merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii

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

Discussions similaires

  1. probleme avec while e affichage
    Par grossi88 dans le forum C
    Réponses: 3
    Dernier message: 24/01/2013, 14h30
  2. probleme avec sprintf
    Par takout dans le forum C
    Réponses: 6
    Dernier message: 18/07/2012, 17h10
  3. probleme avec les charts(affichage du digramme en pdf)
    Par ergo_proxy dans le forum Jasper
    Réponses: 3
    Dernier message: 30/12/2011, 13h25
  4. probleme avec sprintf
    Par semaj_james dans le forum C
    Réponses: 5
    Dernier message: 09/12/2005, 20h07
  5. Probleme avec affichage de date
    Par Wongmaster dans le forum Access
    Réponses: 27
    Dernier message: 24/12/2004, 20h51

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