comment puis-je correctement sauver mes années/mois/jour dans un array

Bonjour à tous

J'ai un doute de débutant quant à la déclaration d'un char.

J'aimerais que
dans l'index 0, mon array sauve l'année,
dans l'index 1, mon array sauve le mois
dans l'index 2, mon array sauve le jour

Simplement, si dans l'index 0 je mets 2015
et que dans l'index 1 je mets 12 et qu'ensuite j'affiche mon char, il va afficher

2125

Comment puis-je alors faire pour que

monChar[0] affiche 2015
monChar[1] affiche 12
monChar[2] affiche 21

Ne devrais-je pas utiliser un array qui va stoquer des chars?
Mais comment on déclare ceci proprement?

Merci et joyeux noel!!

Il faudrait comprendre les types des données que tu manipules:
un char code une valeur comprise entre -128 et +127
un unsigned char code une valeur comprise entre 0 et 255
un int code une valeur comprise entre -32768 et +32767
un unsigned int code une valeur comprise entre 0 et 65535

Il faut choisir le type adapté au besoin

Pour manipuler des données hétérogènes il vaut mieux utiliser les structures. Celles-ci autorisent le mélange des types.
On peut aussi créer des tableaux de structures si nécessaire.

struct date{
  int annee;
  char mois;
  char jour;
}madate;

void setup() {
  Serial.begin(9600);
  madate.annee=2015;
  madate.mois=12;
  madate.jour=25;

  Serial.println(madate.annee,DEC);
  maFonctionQuiManipuleUneDate(&madate);
  Serial.println(madate.annee,DEC);
  maFonctionQuiUtiliseUneDate(madate);
}

// cette fonction reçoit un pointeur sur une structure date et ajoute 2 à l'année
void maFonctionQuiManipuleUneDate(struct date *unedate){
  int an = unedate->annee;
  Serial.println(an);
  an+=2;
  unedate->annee=an;
}

// cette fonction reçoit une structure date et affiche l'année
void maFonctionQuiUtiliseUneDate(struct date unedate){
  int an = unedate.annee;
  Serial.println(an);
}

void loop() {
  // put your main code here, to run repeatedly:

}

Salut fudufnews,

Merci pour ces exemple.
J'ai pensé à utiliser une strcture, mais j'ai finalement fait comme ceci (j'ai retoruvé un code que j'avais dans un autre ficheir)

char * path[2];
char *p = entry.name(); // entry.name retourne soir le nom du dossier, de l'année ou le mois ou le jour
      path[numTabs] = p;

PS: Mes fichiers sont classés par année mois jour. Un dossier pour années, un autre pours les mois etc...

donc dans path[0], il y aura l'année
dans path[1], il y aura le mois etc...

Voici le code complet, je dois encore le tester d'avantage, mais aux premeirs teste ca affiche bien ce que je souhiate

#define DEEPTHPATH 3
char * path[DEEPTHPATH-1];

void printDirectory(File dir, int numTabs) {

  if(numTabs == 0)
  {
    memset(sd_path, '\0', sizeof(sd_path));
  }

   while(true)
   {

     
     File entry =  dir.openNextFile();
     if (! entry)
     {
       // no more files
       /*
       SerialUSB.println(F("Break"));
       sprint(F("numTab: "), 0);
       SerialUSB.println(numTabs);
       */
        

      
      sprint(F("Nb of Files: "), 0);
      sprintln(countSavedFilesInSd, 0);
      sprint(F("\n"), 0);
      
      break;
    }
     
     for (uint8_t i=0; i<numTabs; i++)
     {
       //SerialUSB.print('\t');
     }
     
     // SerialUSB.print(entry.name());
     
     /*
     SerialUSB.print("(");
     SerialUSB.print(numTabs);
     SerialUSB.print(")");
     */
     
     if (entry.isDirectory())
     {
      char *p = entry.name();
      path[numTabs] = p;

      countSavedFilesInSd = 0;
      
      
       // SerialUSB.println("/");
       
       printDirectory(entry, numTabs+1);
     }
     else
     {
       sd_path[0] = '/';
       sd_path[1] = '\0';
       
       for(int f=0; f < numTabs; f++)
       {
         strncat(sd_path, path[f], strlen(path[f]));
         strncat(sd_path, "/" , 1);
       }
 
      /*
      sprint(F("PATH: "), 0);
      sprintln(sd_path, 0);
      */


      
        memset(sd_path_file,'\0',sizeof(sd_path_file));
        sprintf(sd_path_file, "%s%s", sd_path,entry.name());

        // sprintln("FILE:",0);
        sprint(sd_path_file, 0);
       
        // files have sizes, directories do not
        SerialUSB.print("\t");
        SerialUSB.println(entry.size(), DEC);



       
       countSavedFilesInSd++;
     }
     entry.close();
   }


   
}

J'ai juste encore un probleme avec 'countSavedFilesInSd'. Quand il retourne dans un dossier parent qu'il ne contient pas de fichier, 'countSavedFilesInSd' devrait passer à 0 alors qu'il garde sa valeur précédente.

Mais ca c'est optionnel, plus pour info

En fait, je ne crois pas avoir trouvé la meilleur solution car ceci me génère un probleme surprenant

Avant my function setup(), je déclare un variable booléene de cette manière

bool alarm = false;

Si je dépasse un zone, elle passe a true, si je reviens, elle passe à false.

Cette variable n'a trictement rien à voir avec l'interaction de ma carte SD et en aucun cas, elle est appelée à changer de valeur.

Ce qui me surprend, c'est au niveau de ce code

             SerialUSB.print("Alarm741: ");
  SerialUSB.println(alarm);
  
        char *p = entry.name();
        path[numTabs] = p;

        countSavedFilesInSd = 0;
      
      
        // SerialUSB.println("/");

SerialUSB.print("Alarm75: ");
SerialUSB.println(alarm);

Alarm741 m'affiche 0
et Alarme 75 m'affiche 126

Mais comment es-ce possible que d'une part alarm prend une valeur non boléenne, mais surtout comment elle peut changer de valeur après le passage de

char *p = entry.name();
        path[numTabs] = p;

Voici le code de ma fonction qui ou est généré cette erreur

printDirectory("/GPS/",0);

void printDirectory(File dir, int numTabs) {
SerialUSB.print("Alarm71: ");
SerialUSB.println(alarm);

  if(numTabs == 0)
  {
    memset(sd_path, '\0', sizeof(sd_path));
  }


SerialUSB.print("Alarm72: ");
  SerialUSB.println(alarm);

    while(true)
    {
      File entry =  dir.openNextFile();
      if (! entry)
      {
        // no more files
        /*
        SerialUSB.println(F("Break"));
        sprint(F("numTab: "), 0);
        SerialUSB.println(numTabs);
        */
         
        sprint(F("Nb of Files: "), 0);
        sprintln(countSavedFilesInSd, 0);
        sprint(F("\n"), 0);

        SerialUSB.print("Alarm73: ");
  SerialUSB.println(alarm);
      
        break;
      }
     
      for (uint8_t i=0; i<numTabs; i++)
      {
       //SerialUSB.print('\t');
      }
     
      // SerialUSB.print(entry.name());
     
      /*
      SerialUSB.print("(");
      SerialUSB.print(numTabs);
      SerialUSB.print(")");
      */

      SerialUSB.print("Alarm74: ");
  SerialUSB.println(alarm);
     
      if (entry.isDirectory())
      {

              SerialUSB.print("Alarm741: ");
  SerialUSB.println(alarm);
  
        char *p = entry.name();
        path[numTabs] = p;

        countSavedFilesInSd = 0;
      
      
        // SerialUSB.println("/");

SerialUSB.print("Alarm75: ");
  SerialUSB.println(alarm);
       
        printDirectory(entry, numTabs+1);


SerialUSB.print("Alarm76: ");
  SerialUSB.println(alarm);
        
      }
      else
      {
        sd_path[0] = '/';
        sd_path[1] = '\0';
       
        for(int f=0; f < numTabs; f++)
        {
          strncat(sd_path, path[f], strlen(path[f]));
          strncat(sd_path, "/" , 1);
        }
 
        /*
        sprint(F("PATH: "), 0);
        sprintln(sd_path, 0);
        */

        if(entry.name()[0] == '_')
        {
          SerialUSB.print("Delete: ");
          SerialUSB.println(entry.name());
        }

        memset(sd_path_file,'\0',sizeof(sd_path_file));
        sprintf(sd_path_file, "%s%s", sd_path,entry.name());

        // sprintln("FILE:",0);
        sprint(sd_path_file, 0);
       
        // files have sizes, directories do not
        SerialUSB.print("\t");
        SerialUSB.println(entry.size(), DEC);

        countSavedFilesInSd++;

        SerialUSB.print("Alarm78: ");
  SerialUSB.println(alarm);

     }
     
     entry.close();

     SerialUSB.print("Alarm79: ");
  SerialUSB.println(alarm);
   
   }

Alarm71, Alarm72, Alarm73, Alarm74, Alarm741 affcihent bien 0, soit false..

Merci pour vos lumièeres