CRASH dans mon projet
InYourFaceHD
-
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
voila, j'ai un probleme avec ce programme que j'ai codé avec code::Blocks 16.01,
il crash dès que l'on selectionne la difficulté
merci d'avance !
voila, j'ai un probleme avec ce programme que j'ai codé avec code::Blocks 16.01,
il crash dès que l'on selectionne la difficulté
merci d'avance !
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int reponse = 0;
srand(time(NULL));
int NombreDeCoups = 0, nombreMystere = 0, choixDifficulte = 0;
int MAX = 0, MIN = 0;
printf("\n1 = entre 1 et 100");
printf("\n2 = entre 1 et 1000");
printf("\n2 = entre 1 et 10000\n");
scanf("%d",choixDifficulte);
switch (choixDifficulte)
{
case 1:
MAX = 100, MIN = 1;
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf("Votre but est de trouver le nombre mystere ! bonne chance !");
while(reponse != nombreMystere)
{
printf("choisissez un nombre !");
scanf("%d", &reponse);
if (reponse == nombreMystere)
{
printf("tu as gagne!");
}
else if (reponse > nombreMystere)
{
printf("c'est moins !");
}
else if (reponse < nombreMystere)
{
printf("c'est plus !");
NombreDeCoups++;
}
}
printf ("\n tu as trouve en %d coups",NombreDeCoups);
break;
case 2:
MAX = 1000, MIN = 1;
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
reponse = 1;
printf("Votre but est de trouver le nombre mystere ! bonne chance !");
while(reponse != nombreMystere)
{
printf("choisissez un nombre !");
scanf("%d", &reponse);
if (reponse == nombreMystere)
{
printf("tu as gagne!");
}
else if (reponse > nombreMystere)
{
printf("c'est moins !");
}
else if (reponse < nombreMystere)
{
printf("c'est plus !");
NombreDeCoups++;
}
}
printf ("\n tu as trouve en %d coups",NombreDeCoups);
break;
case 3:
MAX = 10000, MIN = 1;
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf("Votre but est de trouver le nombre mystere ! bonne chance !");
while(reponse != nombreMystere)
{
printf("choisissez un nombre !");
scanf("%d", &reponse);
if (reponse == nombreMystere)
{
printf("tu as gagne!");
}
else if (reponse > nombreMystere)
{
printf("c'est moins !");
}
else if (reponse < nombreMystere)
{
printf("c'est plus !");
NombreDeCoups++;
}
}
printf ("\n tu as trouve en %d coups",NombreDeCoups);
break;
default:
printf("choisissez un chiffre entre 1 et 3 svp !");
scanf("%d",choixDifficulte);
}
}
1 réponse
-
Salut,
En compilant avec les warnings, gcc se plaint de deux lignes où tu utilisesscanf()
:
$ gcc -Wall inyourfacehd.c
inyourfacehd.c: In function ‘main’:
inyourfacehd.c:14:2: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int’ [-Wformat=]
scanf("%d",choixDifficulte);
^
inyourfacehd.c:106:4: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int’ [-Wformat=]
scanf("%d",choixDifficulte);
^
inyourfacehd.c:109:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
Tu dois passer un pointeur àscanf()
, donc&choixDifficulte
et non paschoixDifficulte
.
Je n'ai pas regardé le reste du code, cependant, tu dupliques beaucoup de code dans ton switch / case. Tu aurais intérêt à créer une fonction, appelée par le switch / case avec les paramètres appropriés.
Ce n'est pas parce que ton code compile qu'il est correct. Les warnings signalent des situations anormales, non conformes aux standards ou dangereuses et signalent des bogues dans la quasi-totalité des cas. Compile toujours avec les warnings, comprend la raison de chaque warning et élimine leur cause.
Le dernier warning est parce qu'il manquereturn 0;
avant l'accolade fermante de ta fonctionmain()
.
De même, tu devrais changer ton prototype deint main()
enint main(void)
pour signifier que tu n'utilises pas des arguments de ligne de commande sur ton programmes.
Dal