CRASH dans mon projet

Fermé
InYourFaceHD - Modifié le 26 mai 2017 à 03:27
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 29 mai 2017 à 10:56
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 !
#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

[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
Modifié le 29 mai 2017 à 11:03
Salut,

En compilant avec les warnings, gcc se plaint de deux lignes où tu utilises
scanf()
:

$ 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 pas
choixDifficulte
.

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 manque
return 0;
avant l'accolade fermante de ta fonction
main()
.

De même, tu devrais changer ton prototype de
int main()
en
int main(void)
pour signifier que tu n'utilises pas des arguments de ligne de commande sur ton programmes.

Dal
0