Rechercher : dans
Par :

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

Dernière réponse le 13 mai 2008 à 14:14:11 fl0, le 13 mai 2008 à 10:23:25 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « [C] concaténer chaine caractère avec double » dans :
Langage C - Les chaînes de caractères Voir Qu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C, une chaîne...
Les chaînes de caractères en C++ Voir Qu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
Liste doublement chaînée VoirLISTES DOUBLEMENT CHAINÉES Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la liste IV. Opérations sur les listes doublement chaînées A. Initialisation B. Insertion d'un élément dans la...
Les piles en langage C VoirLes piles Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la pile IV. Opérations sur les piles A. Initialisation B. Insertion d'un élément dans la pile C. Ôter un élément de la pile D. Affichage...
Les files en langage C VoirLes files - Premier Entré Premier Sorti Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la file IV. Opérations sur les files A. Initialisation B. Insertion d'un élément dans la file C. Oter un...
VBScript - Les fonctions de chaînes de caractères VoirLes fonctions de chaînes de caractères Fonction Description Filter(InputStrings, Value[, Include[, Compare]]) Sélectionne des chaînes de caractères parmi un tableau de chaînes...
Javascript - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractère Une chaîne de caractère est, comme son nom l'indique, une suite de caractères. On la représente par la suite de caractères encadrée par des guillemets simples (') ou doubles ("), sachant que les deux types de...
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...

1

zavenger, le 13 mai 2008 à 10:58:51

Salut,

ton pb ne viendrait-il pas du fait que tu n'affectes jamais Tableau[1]?

Répondre à zavenger

2

fl0, le 13 mai 2008 à 11:01:50

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

Répondre à fl0

3

fl0, le 13 mai 2008 à 11:03:45

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);
}

Répondre à fl0

4

zavenger, le 13 mai 2008 à 11:20:32

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);
??

Répondre à zavenger

5

fl0, le 13 mai 2008 à 13:29:02

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

Répondre à fl0

6

fl0, le 13 mai 2008 à 13:30:53

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

Répondre à fl0

7

zavenger, le 13 mai 2008 à 13:48:33

A part un sprintf(buf,"%d",temp)
non

Répondre à zavenger

8

fl0, le 13 mai 2008 à 13:54:47

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

Répondre à fl0

9

 fl0, le 13 mai 2008 à 14:14:11

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

Répondre à fl0