Programme en c

bon tt est ok voici mon programme:

#include <time.h>
#include <stdio.h>
#include <stdlib.h>


/* 0 .. max - 1 */
int hasard (int max)
{
   return (max* rand ()) / (RAND_MAX + 1);
}
 
int main (void)
{
	printf("          =======Simulateur de lancer de des BY Bl4ko'=========\n\n\n\n         *******************************************************\n\n");

	{
   int nbrdelance;
   printf ("                          Combien de lances ? : ");
   scanf ("%ld", &nbrdelance);


   srand (time (NULL));
   {
      int i;
      for (i = 0; i < nbrdelance; i++)
      {
         int tirage = 1 + hasard(6);
 
         printf ("-%2d\n", tirage);
      }
      printf ("\n");
   }
system("PAUSE");
return 0;
}
}

T’as plein d’accolades qui servent à rien…

apres le 1er printf , apres srand, apres “printf (”-%2d\n", tirage);" et enfin après “return 0;”.

En dehors de ca, content que t’ai reussi à faire ton petit programme.

a bon mais si j’enlève les accolades que tu me dit cela ne fonctionne plus merci bien a toi ^^

Tu n’as pas dû les retirer au bon endroit.
Redonne ton code une fois les accolades inutiles retirées

#include <time.h>
#include <stdio.h>
#include <stdlib.h>


/* 0 .. max - 1 */
int hasard (int max)
{
return (max* rand ()) / (RAND_MAX + 1);
}
                   void purge(void)
                   {
                   int c;
                   while ((c = getchar()) != '\n' && c != EOF)
                   {}
                   }

int main (void)
{
	printf("          =======Simulateur de lancer de des BY Bl4ko'=========\n\n\n\n         *******************************************************\n\n");

	
   int nbrdelance;
   printf ("                          Combien de lances ? : ");
   scanf ("%ld", &nbrdelance);
   purge();

   srand (time (NULL));
            int i;
            for (i = 0; i < nbrdelance; i++)
                         {
                         int tirage = 1 + hasard(6);
                         printf ("-%2d\n", tirage);
	                     }
           printf ("\n");
           }
      system("PAUSE");
      return 0;
 
}

T’as pas l’air de bien comprendre la logique…

Des accolades définissent un bloque. Entre d’autres choses ca défini la portée de tes variables.

T’as besoin d’accolades au début d’une fonction, pour définir la portée d’une boucle, pour définir la portée d’un if.

Genre ton accolade après “printf (”\n");" (4 lignes avant la fin) elle sert à rien. Où est l’accolade ouvrante associée ?
Elle ferme quoi ? Dans ton cas l’accolade en question ferme l’accolade de la fonction main… donc t’auras surement une erreur de compilation.

Faut réfléchir un peu à ce qu’on fait… c’est pas du random…

Bah si, il veut du random, alors il code aléatoirement?

:smiley:

(je sors, désolé)

Au passage, ce que tu dis n’est pas totalement vrai. Tu peux très bien utiliser les accolades pour signifier quelque chose. Je prend en exemple openGL:

glPushMatrix();
{
   ...
}
glPopMatrix();

Les accolades permettent de te signifier à toi que tu as oublié le pop associé à ton push.

si j’enlève les accolade mes fonctions ne sont plus déclare donc… après je m’y connais moins que toi mais je sais pas

printf ("\n");
}
system(“PAUSE”);

Vire l’accolade fermante. Et essaye de lire les messages d’erreur du compilateur. Les parses errors, c’est quand même les plus simples à corriger.

Effectivement tu peux faire ca…

Mais en pratique en OpenGL on utilise une simple tabulation pour signaler un PushMatrix / PopMatrix ou un Begin / End.
Apres cest une question de convention… mais les accolades ont un sens important pour les parseurs / compilateurs (comme tu le sais)

Je prefere perso eviter d’en abuser, meme si effectivement c’est la meme chose et ca peut permettre de clarifier le code.

Question de gout je suppose :slight_smile:

Je vais faire un petit test pour voir… je te tiens au courant


Je ne t'ai pas dit d'enlever toutes les accolades :) Juste celle qui au-dessus de systeme("Pause").

Edité le 05/03/2008 à 05:12

Bon j’ai fait mon petit test. Sans surprise les accolades sont très importantes et définissent la porté des variables entre autre.

Par exemple :


#include <stdio.h>

int main()
{
  int i = 0;

  i++;
  printf("%d\n", i);
  {
      int i;
    
      i--;
      printf("%d\n", i);
  }
  printf("%d\n", i);
  return 0;
}

Les accolades dans ce cas ne sont pas que décoratives. La deuxieme déclaration de i prend précédence sur la 1ere dans le bloque défini (et pas d’erreur de compilation).
Une fois sortie des accolades c’est la première déclaration qui est valable.

Ca ne veut pas dire qu’il ne faut pas le faire, simplement que c’est dangereux et loin d’etre recommandé. Si pour une raison ou une autre, on déclare une variable dans ces accolades (qui sont là qu’a titre décoratives ou de clarté) la variable ne sera plus valabe à la sortie. Tout comme on pourrait “overrider” une variable de la fonction sans s’en rendre compte (un indice dans une boucle for par exemple).

Enfin tout ca pour dire que les accolades on un sens tres important et ne sont à utiliser que dans le cas ou un veut définir un sous bloque avec une portée limitée.

J’espere que je t’ai convaincu de ne plus le faire :slight_smile:
Edité le 05/03/2008 à 08:46

Donc la je doit les mettre pour declarer i ?? de toute façon j’ai des erreur de compilation après

Zulnov: puis osef, faites du D :wink:

Post ton programme… je vais essayer de te le corriger.

Et puis en fait pas besoin de ton code :


#include <time.h>
#include <stdio.h>
#include <stdlib.h>


/* 0 .. max - 1 */
int hasard (int max)
{
 return (max* rand ()) / (RAND_MAX + 1);
}
 
void purge(void)
{
   int c;
   
   while ((c = getchar()) != '\n' && c != EOF)
      ;
}

int main (void)
{
 int nbrdelance = 0;
 int i;
 int tirage = 0;

 printf(" =======Simulateur de lancer de des BY Bl4ko'=========\n\n\n\n");
 printf(" *******************************************************\n\n");
 printf (" Combien de lances ? : ");
 scanf ("%ld", &nbrdelance);
 purge();

 srand (time (NULL));
 
 for (i = 0; i < nbrdelance; i++)
 {
    tirage = 1 + hasard(6);
 
    printf ("-%2d\n", tirage);
 }
 printf ("\n");

 system("PAUSE");
 return 0;
}

Edité le 05/03/2008 à 20:37

merci a toi sa marche aussi