[C] concaténer chaine caractère avec double

Résolu
fl0 Messages postés 365 Statut Membre -  
fl0 Messages postés 365 Statut Membre -
Bonjour,

voila j'ai besoin de gérer un filtre qui ne comprend que des chaines de caractère
et mon parametre qui vari est un nombre de type doube

pour resoudre mon probleme il faut don que je concatene une chaine caractère constante avec ma variable en double qui varie

voila mon code


char Tableau[10][256];
char buf[50];
double temp;

strcpy(Tableau[0],"COUNTER_ACCESS = "); //je met counter_access dans Tableau[0]

temp=GetTagDouble("visu_archive"); /je vais rechercher le contenu de ma variable que je met dans temp (c'est de la supervision

sprintf(buf, "%d", temp); //je transforme mon nombre(temp) en chaine de caractère

return strncat(Tableau[0] ,Tableau[1],60);

le probleme c'est que mon prog me retourne tjrs
COUNTER_ACCESS = 0
meme quand ma variable vaut autre chose

merci d'avance à tous ceu qui s'interreseront à mon prob
Configuration: Windows XP
Internet Explorer 7.0

5 réponses

  1. zavenger Messages postés 817 Statut Membre 161
     
    Salut,

    ton pb ne viendrait-il pas du fait que tu n'affectes jamais Tableau[1]?
    0
  2. fl0 Messages postés 365 Statut Membre 209
     
    ok mon probleme c'est que j'ai mis %d a la place de %e pour un double
    dans la ligne sprintf

    mais ca ne convien encore pas tout a fait
    j'obtien ca
    COUNTER_ACCESS =1.00000e+0000
    quand ma variable est a 1 etc...

    je voudrais avoir COUNTER_ACCESS =1

    si quelqu'un a une idée
    ce que je veut fonctionne mais c'est pas propre
    0
  3. fl0 Messages postés 365 Statut Membre 209
     
    je vais mettre le code parceque jai fait quelque modif
    comme tu peut le voir je n'ai plus tableau[1] c'était nimp

    #include "apdefap.h"
    char* _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
    {
    char Tableau[10][256];
    char buf[50];
    double temp;
    int i,j;

    strcpy(Tableau[0],"COUNTER_ACCESS = ");

    temp=GetTagDouble("visu_archive");

    sprintf(buf, "%e", temp);
    i=strlen(buf);
    j=strlen(Tableau[0]);

    SetTagDouble("text_user",temp);

    return strncat(Tableau[0] ,buf,i+j);
    }
    0
    1. zavenger Messages postés 817 Statut Membre 161
       
      Tu es bien sur que temp est bien different de 0 ? Tu as un moyen de verifier?
      Pourquoi
      return strncat(Tableau[0] ,buf,i+j);
      et pas
      return strcat(Tableau[0] ,buf);
      ??
      0
      1. fl0 Messages postés 365 Statut Membre 209 > zavenger Messages postés 817 Statut Membre
         
        oui je suis sur que temp est different de 0 je t'explique le fonctionement du logiciel de supervision

        en fait c'est wincc et je peut filtrer certaine donné je ne renterai pas dan le detail c'est pas utile
        pour filtrer les données il faut marquer ce qu'on veut filtrer et par rapport a quoi
        Ok jusque la
        il y a deux facon de le faire statique donc ca change jamais
        ou dynamique dans quel cas il fo un moyen de lui retourné une chaine de caractère avec les info ki vont bien
        (d'ou mon return a la fin)

        et je peu voir que c'est different de 0 car quand ma variable est egale a 1 je vois les enregistrement pour 1 quand ca vaut 2 je vois les enregistrement pour 2 etc...

        dit moi si tu comprend rien

        pour ta derniere question j'ai mis return comme ca parceque c'est comme ca que c t mis dans l'exemple mais maintenant je vais essayais comme ta mis et je te dit quoi
        0
  4. fl0 Messages postés 365 Statut Membre 209
     
    OK j'ai essyer comme ta di
    ca marche pas
    en fait les script wincc sont programmable en c
    mais avec certaine fonction adapter a winCC
    a+
    si ta une idee pour comment passé de
    COUNTER_ACCESS =1.00000e+0000 àCOUNTER_ACCESS =1
    0
    1. zavenger Messages postés 817 Statut Membre 161
       
      a part un sprintf(buf,"%d",temp)
      non
      0
      1. fl0 Messages postés 365 Statut Membre 209 > zavenger Messages postés 817 Statut Membre
         
        le truc c'est que %d ca doit pas etre pour les double mais pour les int pour les double c'est %e mais je vais peut etre regarder pour mettre tous en int tu connais les limite de int???

        de toute facon ca marche tres bien comme ca on ne voit meme pas le temp de reaction
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. fl0 Messages postés 365 Statut Membre 209
     
    OK c'est bon

    voila pour info j'en ai eu besoin et eu du mal a trouvé

    char : de 0 à 255 (ou de -127 à 127)
    signed char : de -127 à 127
    unsigned char : de 0 à 255
    (signed) short : de -32767 à 32767
    unsigned short : de 0 à 65535
    (signed) int : de -32767 à 32767
    unsigned int : de 0 à 65535
    (signed) long : de -2147483647 à 2147483647
    unsigned long : de 0 à 4294967295
    (signed) long long : de -9223372036854775807 à 9223372036854775807
    unsigned long long : de 0 à 18446744073709551615

    moi j'ai choisi unsigned long long comme la machine va chez un client autant prevoir large
    voila mon code

    #include "apdefap.h"
    char* _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
    {
    char Tableau[10][256];
    char buf[50];
    unsigned long long temp;
    int i,j;

    strcpy(Tableau[0],"COUNTER_ACCESS = ");
    temp=GetTagDWord("visu_archive");
    sprintf(buf, "%ld", temp);
    i=strlen(buf);
    j=strlen(Tableau[0]);

    return strncat(Tableau[0] ,buf,i+j);

    j'ai tous simplement remplacer temp par un entier a la place d'un chiffre exprimer en puissance de 10 et voila merci tous mes probleme sont resolu si vous avez des questions
    0