Pkoi ça boucle???

Pkoi ça boucle??? - C++ - Programmation

Marsh Posté le 07-01-2003 à 12:10:39    

:pfff:  
salut à vous tout d'abor
je suis en train d'essayer de me faire un calendrier en C, mais la y'a boucle qui boucle...qui boucle et reboucle...
voilou mon programme, c vilain mais je débute  :sarcastic:  
la fonction decalage me renvoie 3 donc c'est bon,mais ça boucle au nivo du printf en GRAS
 
 
void calendrier(int annee)
{
 int joursemaine = 0; /* nombre de jour dans une semaine */
 int decalagejour;
 int nbjours, lejour;
 char* tab[11];
 tab[0]="JANVIER";
 tab[1]="FEVRIER";
 tab[2]="MARS";
 tab[3]="AVRIL";
 tab[4]="MAI";
 tab[5]="JUIN";
 tab[6]="JUILLET";
 tab[7]="AOUT";
 tab[8]="SEPTEMBRE";
 tab[9]="OCTOBRE";
 tab[10]="NOVEMBRE";
 tab[11]="DECEMBRE";
 
 for(int NumMois = 1;NumMois <= 12; NumMois++)
  {
  printf("%s\n",tab[NumMois]);
  printf("--------------\n|Lu|Ma|Me|Je|Ve|Sa|Di|\n|" );
  nbjours = jour(NumMois, annee);
  decalagejour = decalage(nbjours);
  lejour = 1;
 
  for(int ligne = 1;ligne <= 5 ;ligne++)
   {
   for(int colonne = 1; colonne <= 7;colonne++)
    {
     if((colonne = 1)&&(ligne = 1))
     {for(int i = decalagejour; i <= decalagejour;i++)
      {printf("  |" );
      colonne++;}
     }
 
     if(lejour <= nbjours)
     {
      if(lejour < 10) printf(" " );
      printf("%d",lejour);
      printf("|" );}
     else
      {printf("  |" );}
    lejour++;
    }
   printf("\n" );
   }
  }
}

Reply

Marsh Posté le 07-01-2003 à 12:10:39   

Reply

Marsh Posté le 07-01-2003 à 12:17:58    

nummois va de 1 à 12. donc la ligne  
 
printf("%s\n",tab[NumMois]);
 
est fausse : en C, les indices de tableau vont de 0 à n-1. Tu dois donc écrire :
 
printf("%s\n",tab[NumMois-1]);
 
je sais pas si ça résoudra ton souci (j'ai pas le temps de lire tout ton code), mais ça sera toujours ça de pris


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 07-01-2003 à 12:19:32    

merci, c'est déjà ça  :jap:

Reply

Marsh Posté le 07-01-2003 à 12:20:10    

un test if c est == et pas = la condition
 
La ta boucle for(int colonne = 1; colonne <= 7;colonne++) y a colonne qui vaut tj 1 suite au passage du test if (colonne = 1)


Message édité par VisualC++ le 07-01-2003 à 12:20:37
Reply

Marsh Posté le 07-01-2003 à 12:22:19    

j'ai pas regardé ta boucle.
 
en C, les tableaux sont indexés de 0 à N-1
 
si tu as 12 mois, déclares un tableau [12] et ainsi les indices de [0] à [11] sont correctement alloués
 
tu peux également perfectionner ton initialisation de la sorte
 
static const char* mois[]={ "Janvier", ..., "Decembre"};
 
 
-> static : le tableau survit à la fonction: chaque appel de fonction n'a pas besoin de réinitiliser le tableau == + performant
-> const :les chaines littérales "chaine literrales" sont des constantes, on ne doit pas les modifier. l'ajout de ce mot clef permet au compilateur de vérifier qu'elle ne sont pas modifiées
-> mois: c'est un noms de variables plus explicites
->[]: le compilateur se charge lui meme de réserver le bon nombre d'élément
-> { } : initialisation, les éléments de ton tableau prennent un valeur des leur allocation. c'est plus performant et moins long à ecrire de de faire mois[0]="janvier" etc.
 

Reply

Marsh Posté le 07-01-2003 à 12:23:20    

VisualC++ a écrit :

un test if c est == et pas = la condition


oui, aussi, j'avais pas fait gaffe :/


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 07-01-2003 à 12:23:22    

Merci bocou Visual C++, cété ça.... :jap:  :jap:  
 
Youpi  :bounce:  
 [:ziiio]  
 
merci, merci, merci, tu m'a sové ma vie, SSScool !!!

Reply

Marsh Posté le 07-01-2003 à 12:24:17    

++Taz a écrit :

j'ai pas regardé ta boucle.


et t'as pas regardé la réponse que je lui ai faite au début non plus ;)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 07-01-2003 à 12:26:11    

Harkonnen a écrit :


et t'as pas regardé la réponse que je lui ai faite au début non plus ;)

ben j'etais entrain de faire autre chose, j'ai pris mon temps et tu m'a grillaid  :sweat:

Reply

Marsh Posté le 07-01-2003 à 12:46:34    

ssppaaa grave ++Taz, merci à tous  :jap:  
 :hello:

Reply

Sujets relatifs:

Leave a Replay

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