concaténer une variable avec un nombre dans une boucle

bonjour tout le monde,
question de débutant de la loose, mais bon.
je cherche a rajouter dans une boucle le nombre de mon FOR à une variable, le truc basique en fait, mais qui me pose un gros problème.
en php, aucun soucis pour faire ce genre de chose, mais en c++, ben........

en résumant, je recois des variables via internet, je parse le tout et je renvois par RF les données séparées.

while (str = strtok_r(code, "-", &code)){
variables = str;

  • i++;*

  • }*

  • for(int ii=0;ii<i;ii++){*

  • Serial.println(variables[ii]);*
    }

  • Serial.println(variables[0]);*

  • Serial.println(variables[1]);*

  • Serial.println(variables[2]);*

  • Serial.println(variables[3]);*

  • Serial.println(variables[4]);*
    char donnee1[5]="";
    char donnee2[10]="";
    char donnee3[10]="";
    char donnee4[10]="";
    char donnee5[10]="";
    char donnee[20]="";

  • strcat(donnee1, "A-");*

  • strcat(donnee1, variables[0]);*

  • Serial.println(donnee1);*

  • strcat(donnee2, "B-"); *

  • strcat(donnee2, variables[1]);*

  • strcat(donnee2, "-"); *

  • strcat(donnee2, variables[2]);*

  • Serial.println(donnee2);*

  • strcat(donnee3, "C-"); *

  • strcat(donnee3, variables[3]);*

  • strcat(donnee3, "-"); *

  • strcat(donnee3, variables[4]);*

  • Serial.println(donnee3);*

  • strcat(donnee4, "D-"); *

  • strcat(donnee4, variables[5]);*

  • strcat(donnee4, "-"); *

  • strcat(donnee4, variables[6]);*

  • Serial.println(donnee4);*
    [/quote]
    jusque là, tout va bien, c'est maintenant que ca se complique
    je veux dans une boucle afficher le "terme" donnee en rajoutant 1-2-3-4-5 afin d'avoir donnee1 donnee2 etc.. et qu'il me ressorte le contenu des variables de donnee1........donnee5
    j'ai donc fais ceci, mais il m'affiche du n'importe nawak
    > for (int compt=0;compt<6;compt++) {
    > Serial.println(donnee[compt]);
    > Serial.println(compt);
    >
    > }
    j'ai testé aussi avec strcat, mais niet.
    merci d'avance

bon, je viens d'utiliser sprintf, ca me renvoi bien les mots désirés, mais pas les variables qu'ils contiennent.

for (int compt=0;compt<6;compt++) {
sprintf(donnee, "%s%d", mot, compt);
Serial.println(donnee);

renvoi

donnee0
donnee1
donnee2
donnee3
donnee4
donnee5

au lieu de

A-0
B-255-60
C-199-60
D-124-60
E-99-60

?

Ca y est ! je viens de comprendre.

Tu as déclaré des tableaux de char donnee1, donnee2, ....donnee5.

Si tu fais :

sprintf(donnee, "%s%d", mot, compt);
Serial.println(donnee);

le Serial.println(donnee) ne va JAMAIS afficher la valeur de la variable du programme ! On ne peut pas faire une évaluation de la sorte en C !

la solution la plus simple est d'utiliser un tableau de char à 2 dimension genre :

char donnee[6][20];

 strcat(donnee[1], "A-"); 
  strcat(donnee[1], variables[0]);
  Serial.println(donnee[1]);

  strcat(donnee[2], "B-");   
  strcat(donnee[2], variables[1]);
  strcat(donnee[2], "-");    
  strcat(donnee[2], variables[2]);
  Serial.println(donnee[2]);
  
  strcat(donnee[3], "C-");     
  strcat(donnee[3], variables[3]);
  strcat(donnee[3], "-");  
  strcat(donnee[3], variables[4]);
  Serial.println(donnee[3]);
  
  strcat(donnee[4], "D-");       
  strcat(donnee[4], variables[5]);
  strcat(donnee[4], "-");  
  strcat(donnee[4], variables[6]);
  Serial.println(donnee[4]);

et après tu auras :

for (int compt=0;compt<6;compt++) 
{
  sprintf(donnee, "%s%d", mot, compt);
  Serial.println(donnee[i]);
}

merci pour le tuyau, mais ca me sort une erreur

ACCESSRECEIVE2.cpp:203: erreur: cannot convert ‘char ()[20]’ to ‘char’ for argument ‘1’ to ‘int sprintf(char*, const char*, ...)’
ACCESSRECEIVE2.cpp:212: erreur: cannot convert ‘char ()[20]’ to ‘const char’ in initialization

Montre nous le code des lignes 203 et 212 concernées par les erreurs stp.

bon je viens de réussir en créant un tableau tout bête et en mettant les variables dedans après.
c'est pas très catholique, mais ca fonctionne.
sinon pour les erreurs, ca allait sur des lignes commentées, donc je comprends pas trop pourquoi.

voila ce qui foncitonne

char* tableau[6];

loop(){

//tout le reste au dessus
//et
tableau[0]=donnee1;
tableau[1]=donnee2;
tableau[2]=donnee3;
tableau[3]=donnee4;
tableau[4]=donnee5;

Serial.println("envoie des donnees");
for (int compt=0;compt<5;compt++) {
Serial.println(tableau[compt]);
}

infobarquee:
sinon pour les erreurs, ca allait sur des lignes commentées, donc je comprends pas trop pourquoi.

Les numéros de lignes sont ceux du fichier *.cpp généré par la chaîne de compilation Arduino, pas dans le sketch *.ino :wink: