[c] Ca semble con mais...

Ca semble con mais... [c] - Programmation

Marsh Posté le 23-07-2002 à 15:16:39    

Bon, j'ai un truc bizzard, tout con, mais bizzard...
 
Rien de bien sorcier, je génère les heures & minutes ('xx:xx';) dans un tableau à double entrée.
 
Sauf que lorsque je veux le relire, il me sort tout à la suite!!!
donc d'abord :

Code :
  1. int i, j, k=0;
  2. char tcTmp[1440][5];
  3.    for(i=0; i<24; i++)
  4.    {
  5.       for(j=0; j<60; j++)
  6.       {
  7.          if(i<10 && j<10)
  8.             sprintf(tcTmp[k], "0%d:0%d", i, j);
  9.          else if(i<10)
  10.             sprintf(tcTmp[k], "0%d:%d", i, j);
  11.          else if(j<10)
  12.             sprintf(tcTmp[k], "%d:0%d", i, j);
  13.          else
  14.             sprintf(tcTmp[k], "%d:%d", i, j);
  15.          k++;
  16.       }
  17.    }


 
Ensuite tout connement :

Code :
  1. for(i=0; i<1440; i++)
  2. {
  3. printf("Heure n° %d : %s\n", i, tcTmp[i]);
  4.          k++;
  5. }


 
Et bien il me sort tout comme si il ne voyait qu'une seule chaîne:o?!
 
Des suggestions:)?


Message édité par fodger le 23-07-2002 à 15:36:58

---------------
Just drink it!
Reply

Marsh Posté le 23-07-2002 à 15:16:39   

Reply

Marsh Posté le 23-07-2002 à 15:22:14    

normal
 
 

Code :
  1. int i, j, k=0;
  2. char *tcTmp[1440];
  3.   for(i=0; i<24; i++)
  4.   {
  5.      for(j=0; j<60; j++)
  6.      {
  7.        tcTmp[k] = (char*)malloc(sizeof(char)*6);
  8.        sprintf(tcTmp[k++], "%.2d:%.2d", i, j);
  9.      }
  10.   }


Message édité par LetoII le 23-07-2002 à 15:23:01

---------------
Le Tyran
Reply

Marsh Posté le 23-07-2002 à 15:22:57    

ben ouais, normal, t'ecris tjs au meme endroit :O
 
 

Code :
  1. int i, j, k=0;
  2. char tcTmp[1440][5];
  3. int cpt = 0;
  4.   for(i=0; i<24; i++)
  5.   {
  6.      for(j=0; j<60; j++)
  7.      {
  8.         if(i<10 && j<10)
  9.            sprintf(tcTmp[cpt], "0%d:0%d", i, j);
  10.         else if(i<10)
  11.            sprintf(tcTmp[cpt], "0%d:%d", i, j);
  12.         else if(j<10)
  13.            sprintf(tcTmp[cpt], "%d:0%d", i, j);
  14.         else
  15.            sprintf(tcTmp[cpt], "%d:%d", i, j);
  16. cpt ++;
  17.      }
  18.   }


Message édité par chrisbk le 23-07-2002 à 15:23:20
Reply

Marsh Posté le 23-07-2002 à 15:24:01    

letoII a écrit a écrit :

normal
 
 

Code :
  1. int i, j, k=0;
  2. char *tcTmp[1440];
  3.   for(i=0; i<24; i++)
  4.   {
  5.      for(j=0; j<60; j++)
  6.      {
  7.        tcTmp[k] = (char*)malloc(sizeof(char)*6);
  8.        sprintf(tcTmp[k++], "%.2d:%.2d", i, j);
  9.      }
  10.   }






 
j'ai horreur de ca [:ddr555]

Reply

Marsh Posté le 23-07-2002 à 15:26:14    

chrisbk a écrit a écrit :

 
 
j'ai horreur de ca [:ddr555]




 
Moi j'adore :D
Je sais que certain ont du mal à le lire, mais ça fait trop longtemps que je l'utilise ça vient naturellement maintenent :ange:


---------------
Le Tyran
Reply

Marsh Posté le 23-07-2002 à 15:32:44    

letoII a écrit a écrit :

 
 
Moi j'adore :D
Je sais que certain ont du mal à le lire, mais ça fait trop longtemps que je l'utilise ça vient naturellement maintenent :ange:  




 
je sais jamais si ca se fait apres ou avant :D C'est comme l'operateur ternaire, je peux pas le voir en peinture celui la :D

Reply

Marsh Posté le 23-07-2002 à 15:38:40    

Mais si c simple: a = k++; => a = k; k += 1;
                  a = ++k; => k += 1; a = k;
 
Là où c chaud c: a = --k++; :D


---------------
Le Tyran
Reply

Marsh Posté le 23-07-2002 à 15:39:56    

J'avais mal écrit, j'ai rectifié!  
Evidemment je n'écris pas au même endroit... par ailleurs la lecture se faisait dans la même fonction.  
 
Par ailleurs l'utilisation du malloc n'est pas requise puisque qu'il s'agit d'un tableau double, et non d'un pointeur double.
 
Donc une autre remarque?


---------------
Just drink it!
Reply

Marsh Posté le 23-07-2002 à 15:42:19    

Fodger a écrit a écrit :

J'avais mal écrit, j'ai rectifié!  
Evidemment je n'écris pas au même endroit... par ailleurs la lecture se faisait dans la même fonction.  
 
Par ailleurs l'utilisation du malloc n'est pas requise puisque qu'il s'agit d'un tableau double, et non d'un pointeur double.
 
Donc une autre remarque?




 
ouaip, rebalance nous le code exact

Reply

Marsh Posté le 23-07-2002 à 15:45:32    

letoII a écrit a écrit :

Mais si c simple: a = k++; => a = k; k += 1;
                  a = ++k; => k += 1; a = k;
 
Là où c chaud c: a = --k++; :D




 
 
fo etre fou pour ecrire des trucs comme ca :O

Reply

Marsh Posté le 23-07-2002 à 15:45:32   

Reply

Marsh Posté le 23-07-2002 à 15:54:19    

Non, j'ai du le faire une fois... juste pour voir ce que ça faisait :D


---------------
Le Tyran
Reply

Marsh Posté le 23-07-2002 à 15:55:03    

Si tu veux pas faire de malloc, met 6 comme taille de chaîne, marchera beaucoup mieux


---------------
Le Tyran
Reply

Marsh Posté le 23-07-2002 à 16:04:58    

letoII a écrit a écrit :

Si tu veux pas faire de malloc, met 6 comme taille de chaîne, marchera beaucoup mieux




 
à cause du '\0'?


---------------
Just drink it!
Reply

Marsh Posté le 23-07-2002 à 16:09:03    

yes it is

Reply

Marsh Posté le 23-07-2002 à 16:16:03    

Fodger a écrit a écrit :

J'avais mal écrit, j'ai rectifié!  
Evidemment je n'écris pas au même endroit... par ailleurs la lecture se faisait dans la même fonction.  
 
Par ailleurs l'utilisation du malloc n'est pas requise puisque qu'il s'agit d'un tableau double, et non d'un pointeur double.
 
Donc une autre remarque?




 
Le problème c'est le '\0' !!! C'est lui qui indique la fin de la chaîne ...
 
Si tu écris uniquement la 1° danss le tableau et que tu l'affiches ça marche.
 
Maintenant écrit la deuxième et affiche la 1° puis la 2° et là tu vas comprendre que le '\0' de la premiere chaine (qui se trouve en réalité à la position [1][0] est écrasé lors de l'écriture de la 2° chaîne !!!
 
Ps : pour simplifier la génération de ta chaîne :

Code :
  1. char tcTmp[1440][5 + 1]; /* 1440 chaînes de 5 caractères */
  2. [...]
  3. sprintf(tcTmp[k], "%02d;%02d", i , j); /* écriture d'un nombre sur 2 chiffres et remplissage par des '0' pour les positions non utilisées */


Message édité par darkoli le 23-07-2002 à 16:17:24

---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
Reply

Marsh Posté le 23-07-2002 à 16:20:58    

Fodger a écrit a écrit :

 
 
à cause du '\0'?




 
Tout à fait. J'ai pas osé être aussi explicite (penssant que ct une faute de frape son 5 :D)


---------------
Le Tyran
Reply

Marsh Posté le 23-07-2002 à 16:21:13    

ouais à tous les coups c'est ça, le genre d'inatention qui coûte cher:D... parce qu'à l'affichage le tableau était considéré comme une chaîne de caractères unique. merci ;).


---------------
Just drink it!
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed