Gestion des erreurs en C

Fermé
Docteur Cox Messages postés 105 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 8 décembre 2013 - 22 nov. 2009 à 15:15
Docteur Cox Messages postés 105 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 8 décembre 2013 - 27 nov. 2009 à 20:20
Bonjour,
Je suis en train d'essayer de faire un petit programme en C mais quand je l'execute de temps en temps il se ferme tout seul sans que j'ai pu définir pourquoi...
J'aimerais donc trouver un moyen d'afficher les erreurs que rencontrent mon programme...
A voir également:

13 réponses

Télécharge l'IDE Code::Block et met ton programme dedans, il te dit les buggs
0
Docteur Cox Messages postés 105 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 8 décembre 2013 4
22 nov. 2009 à 15:22
ll les dit où? par ce que c'est déjà celui la que j'ai...
0
nobie-cs Messages postés 155 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 15 mai 2010 17
22 nov. 2009 à 22:29
tu peut poster ton programme
0
Docteur Cox Messages postés 105 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 8 décembre 2013 4
22 nov. 2009 à 22:56
OK mais c'est un peu brouillon... :S
C'est un snake

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_ttf.h>


#define TAILLE_CASE 11
#define NB_CASE_H 15
#define NB_CASE_L 25

#define HAUT -1
#define BAS 1
#define DROITE 1
#define GAUCHE -1
#define STOP 0

enum{MUR, POMME, SNAKE, QUEUE_SNAKE, VIDE};


typedef struct DIRECTION DIRECTION;
struct DIRECTION
{
int vertical;
int horizontal;
int x;
int y;
};




int initialisation( int carte[NB_CASE_L][NB_CASE_H] );
void joue( int carte[NB_CASE_L][NB_CASE_H], SDL_Surface *ecran );



int main(int argc, char *argv[])
{
int continuer = 1;
int carte[NB_CASE_L][NB_CASE_H];
SDL_Surface *ecran = NULL;
SDL_Event event;

srand(time(NULL));

if ( SDL_Init(SDL_INIT_VIDEO) == -1 )
{ fprintf(stderr, "Erreur d'initialisation de la SDL"); exit(EXIT_FAILURE); }
if( TTF_Init() == -1 )
{ fprintf(stderr, "Erreur d'initialisation de TTF_Init : %s\n", TTF_GetError()); exit(EXIT_FAILURE); }


ecran = SDL_SetVideoMode(NB_CASE_L * TAILLE_CASE, NB_CASE_H * TAILLE_CASE, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
SDL_WM_SetCaption("< Snake>", NULL);


carte[NB_CASE_L][NB_CASE_H] = initialisation( carte );
joue( carte, ecran );


while(continuer)
{
SDL_WaitEvent(&event);

switch ( event.type )
{
case SDL_QUIT:
continuer = 0;
break;

case SDL_KEYDOWN:
switch ( event.key.keysym.sym )
{
case SDLK_ESCAPE:
continuer = 0;
break;

case SDLK_F2:
carte[NB_CASE_L][NB_CASE_H] = initialisation( carte );
joue( carte, ecran );
break;

default:
break;
}
}
}

SDL_Quit();
TTF_Quit();
return EXIT_SUCCESS;
}

/************************************************************************/

int initialisation(int carte[NB_CASE_L][NB_CASE_H])
{
int i = 0, j = 0;

for (i = 0; i < NB_CASE_L; i++)
{ for(j = 0; j < NB_CASE_H; j++)
{
carte[i][j] = VIDE;
}
}

carte[9][7] = SNAKE;

carte[0][0] = MUR;
carte[0][1] = MUR;
carte[1][0] = MUR;
carte[1][1] = MUR;

carte[NB_CASE_L-1][NB_CASE_H-1] = MUR;
carte[NB_CASE_L-2][NB_CASE_H-1] = MUR;
carte[NB_CASE_L-1][NB_CASE_H-2] = MUR;
carte[NB_CASE_L-2][NB_CASE_H-2] = MUR;

carte[NB_CASE_L-1][0] = MUR;
carte[NB_CASE_L-1][1] = MUR;
carte[NB_CASE_L-2][0] = MUR;
carte[NB_CASE_L-2][1] = MUR;

carte[0][NB_CASE_H-1] = MUR;
carte[1][NB_CASE_H-1] = MUR;
carte[0][NB_CASE_H-2] = MUR;
carte[1][NB_CASE_H-2] = MUR;

carte[(NB_CASE_L/2)][(NB_CASE_H/2)] = MUR;
carte[(NB_CASE_L/2)-1][(NB_CASE_H/2)-1] = MUR;
carte[(NB_CASE_L/2)+1][(NB_CASE_H/2)-1] = MUR;
carte[(NB_CASE_L/2)-1][(NB_CASE_H/2)+1] = MUR;
carte[(NB_CASE_L/2)+1][(NB_CASE_H/2)+1] = MUR;
carte[(NB_CASE_L/2)+1][(NB_CASE_H/2)] = MUR;
carte[(NB_CASE_L/2)-1][(NB_CASE_H/2)] = MUR;
carte[(NB_CASE_L/2)][(NB_CASE_H/2)+1] = MUR;
carte[(NB_CASE_L/2)][(NB_CASE_H/2)-1] = MUR;

return carte[NB_CASE_L][NB_CASE_H];
}

/************************************************************************/

void joue( int carte[NB_CASE_L][NB_CASE_H], SDL_Surface *ecran )
{
int i = 0, j = 0, k = 0, l = 0;
int nouvi = 0, nouvj = 0;
int x = 0, y = 0;
int continuer = 1;
int ContinuerBoucle = 1;
int DirectionVerticale = STOP;
int DirectionHorizontale = STOP;
int DirectionVerticaleFin = STOP;
int DirectionHorizontaleFin = STOP;
int TempsActuel = 0;
int TempsPrecedent = 0;
int SnakeTemp = 1128; // une valeur au hasard
DIRECTION QueueDeSnake[1000];
int TailleQueue = 1;
SDL_Event event;
SDL_Rect position;
SDL_Surface *Mur = IMG_Load("mur.png");
SDL_Surface *Snake = IMG_Load("snake.png");
SDL_Surface *Pomme = IMG_Load("pomme.png");


for (k = 0; k < 20; k++)
{
QueueDeSnake[ k ].horizontal = 0;
QueueDeSnake[ k].vertical = 0;
QueueDeSnake[ k ].x = -1;
QueueDeSnake[ k ].y = -1;
}

while ( ContinuerBoucle == 1 )
{
x = (rand() % (NB_CASE_L - 1)); // on calcule les coordonnées de la nouvelle pomme
y= (rand() % (NB_CASE_H - 1));

// test pour vérifier que la pomme est dans la fenêtre et qu'elle n'est pas dans un mur ou autre...
if ( carte[x][y] != MUR && carte[x][y] != SnakeTemp && x >= 0 && y >= 0 && x <= NB_CASE_L && y <= NB_CASE_H )
{ ContinuerBoucle = 0; }
}
carte[x][y] = POMME;


while (continuer)
{

TempsPrecedent = SDL_GetTicks();
while(TempsActuel - TempsPrecedent < 150)
{
SDL_Delay(50);
TempsActuel = SDL_GetTicks();
}

// là il y a un truc un peu étrange : comme c'était avant ça le faisait avancer 2 fois par boucle, maintenant c'est bon ça marche impec mais je sais pas trop comment... :P
ContinuerBoucle = 0;
do
{
event.type = SDL_KEYUP;
SDL_PollEvent(&event); // récupèration de l'évènement dans event

switch(event.type) // test du type d'évènement
{
case SDL_QUIT: // si c'est un évènement de type "Quitter"
continuer = 0;
break;

case SDL_KEYUP:
switch( event.key.keysym.sym )
{
case SDLK_UP:
if ( DirectionVerticale != BAS ) { DirectionVerticale = HAUT; DirectionHorizontale = STOP; }
break;

case SDLK_DOWN:
if ( DirectionVerticale != HAUT ) { DirectionVerticale = BAS; DirectionHorizontale = STOP; }
break;

case SDLK_RIGHT:
if ( DirectionHorizontale != GAUCHE ) { DirectionHorizontale = DROITE; DirectionVerticale = STOP; }
break;

case SDLK_LEFT:
if ( DirectionHorizontale != DROITE ) { DirectionHorizontale = GAUCHE; DirectionVerticale = STOP; }
break;

default:
break;
}
ContinuerBoucle = 0;
break;

case SDL_KEYDOWN:
ContinuerBoucle = 1;
break;

default:
ContinuerBoucle = 0;
break;
}

} while( ContinuerBoucle == 1 );


/** boucle pour faire déterminer les nouvelles coordonées de SNAKE**/
for(i = 0; i < NB_CASE_L; i++)
{for(j = 0; j < NB_CASE_H; j++)
{
if (carte[i][j] == SNAKE)
{
nouvi = i + DirectionHorizontale;
// si les nouvelles coordonées sortent de l'écran par un coté, snake réaparait de l'autre
if (nouvi >= NB_CASE_L)
{ nouvi = 0; }
else if (nouvi < 0)
{ nouvi = NB_CASE_L - 1; }

nouvj = j + DirectionVerticale;
// si les nouvelles coordonées sortent de l'écran par un coté, snake réaparait de l'autre
if (nouvj >= NB_CASE_H)
{ nouvj = 0; }
else if (nouvj < 0)
{ nouvj = NB_CASE_H -1; }


// si SNAKE mange un mur
if ( carte[ nouvi ][ nouvj ] == MUR )
{
continuer = 0; // pour sortir de la boucle
nouvi = i; // pour ne plus avancer
nouvj = j;
Snake = IMG_Load("snakerouge.png");
}


// si SNAKE mange une pomme
if ( carte[nouvi][nouvj] == POMME )
{
TailleQueue++;
ContinuerBoucle = 1;
while ( ContinuerBoucle == 1 )
{
carte[ nouvi ][ nouvj ] = SnakeTemp; // on le fait quand même avancer

x = (rand() % (NB_CASE_L - 1)); // on calcule les coordonnées de la nouvelle pomme
y= (rand() % (NB_CASE_H - 1));

// test pour vérifier que la pomme est dans la fenêtre et qu'elle n'est pas dans un mur ou autre...
if ( carte[x][y] != MUR && carte[x][y] != SnakeTemp && x >= 0 && y >= 0 && x <= NB_CASE_L && y <= NB_CASE_H )
{ ContinuerBoucle = 0; }
}
carte[x][y] = POMME;
}


/** on met snake aux nouvelles coordonnées **/
// si je met SNAKE tt de suite il va le retrouver au prochain tour de boucle, donc je met SnakeTemp
carte[ nouvi ][ nouvj ] = SnakeTemp;
//on met la queue de snake à sa précédente position pour qu'elle le suive
carte[ i ][ j ] = QUEUE_SNAKE;


for (k = TailleQueue - 1; k > 0; k--)
{
QueueDeSnake[ k ].vertical = QueueDeSnake[k-1].vertical;
QueueDeSnake[ k ].horizontal = QueueDeSnake[k-1].horizontal;
}


QueueDeSnake[0].vertical = DirectionVerticaleFin;
QueueDeSnake[0].horizontal = DirectionHorizontaleFin;


QueueDeSnake[0].x = i - QueueDeSnake[0].horizontal;
QueueDeSnake[0].y = j - QueueDeSnake[0].vertical;

for ( k = 1; k < TailleQueue; k++ )
{
QueueDeSnake[k].x = QueueDeSnake[k-1].x - QueueDeSnake[k].horizontal;
QueueDeSnake[k].y = QueueDeSnake[k-1].y - QueueDeSnake[k].vertical;

carte[QueueDeSnake[k].x][QueueDeSnake[k].y] = SnakeTemp;
}

QueueDeSnake[0].vertical = DirectionVerticale;
QueueDeSnake[0].horizontal = DirectionHorizontale;


if ( QueueDeSnake[TailleQueue-1].x < 0)
{
carte[ NB_CASE_L + QueueDeSnake[TailleQueue-1].x ][ QueueDeSnake[TailleQueue-1].y ] = VIDE;
}
if ( QueueDeSnake[TailleQueue-1].y < 0)
{
carte[ QueueDeSnake[TailleQueue-1].x ][ NB_CASE_H + QueueDeSnake[TailleQueue-1].y ] = VIDE;
}
{
carte[ QueueDeSnake[TailleQueue-1].x ][ QueueDeSnake[TailleQueue-1].y ] = VIDE;
}
}
}
}

// et maintenant qu'on est plus dans la boucle on peut remettre SNAKE
carte[ nouvi ][ nouvj ] = SNAKE;


for ( k = 0; k < NB_CASE_L; k++ )
{ for ( l = 0; l < NB_CASE_H; l++ )

if ( carte[ k ][ l ] == SnakeTemp )
{
carte[ k ][ l ] = QUEUE_SNAKE;
}
}




/** toute la partie pour l'affichage **/

SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));

for (i = 0; i < NB_CASE_L; i++)
{ for(j = 0; j < NB_CASE_H; j++)
{
position.x = i * TAILLE_CASE;
position.y = j * TAILLE_CASE;

switch (carte[i][j])
{
case MUR:
//surface = IMG_Load("mur2.png");
SDL_BlitSurface(Mur, NULL, ecran, &position);
break;
case POMME:
//surface = IMG_Load("pomme.png");
SDL_BlitSurface(Pomme, NULL, ecran, &position);
break;
case SNAKE:
//surface = IMG_Load("snake.png");
SDL_BlitSurface(Snake, NULL, ecran, &position);
break;
case QUEUE_SNAKE:
//surface = IMG_Load("snake.png");
SDL_BlitSurface(Snake, NULL, ecran, &position);
break;
}
}
}
SDL_Flip(ecran);
}
}
0
nobie-cs Messages postés 155 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 15 mai 2010 17
22 nov. 2009 à 23:01
c'est quoi sa ?
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_ttf.h>
0
Docteur Cox Messages postés 105 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 8 décembre 2013 4 > nobie-cs Messages postés 155 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 15 mai 2010
22 nov. 2009 à 23:16
Ben j'inclue les librairies SDL, celle pour les images compressées et celle pour écrire...
0
nobie-cs Messages postés 155 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 15 mai 2010 17 > Docteur Cox Messages postés 105 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 8 décembre 2013
22 nov. 2009 à 23:18
je peut pas exécute ton programme car je l'ai pas
0
Docteur Cox Messages postés 105 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 8 décembre 2013 4 > nobie-cs Messages postés 155 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 15 mai 2010
22 nov. 2009 à 23:35
Comment ça tu l'as pas? j'ai copié collé...
0
nobie-cs Messages postés 155 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 15 mai 2010 17
22 nov. 2009 à 23:40
la librairies SDL est un fichier externe
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Docteur Cox Messages postés 105 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 8 décembre 2013 4
23 nov. 2009 à 20:44
oui je sais, je les ai toute installlées en suivant ce que diasait le site du zero de toute façon...
Mais sinon tu connais pas une façon de connaitre l'erreur qu'il a rencontré quand il se ferme d'un coup?
0
nobie-cs Messages postés 155 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 15 mai 2010 17
23 nov. 2009 à 22:22
tu mette getchar() avant return 0; dans la fonction int main()
0
Docteur Cox Messages postés 105 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 8 décembre 2013 4
24 nov. 2009 à 20:24
Ouais et ça l'affiche où l'erreur?
0
nobie-cs Messages postés 155 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 15 mai 2010 17
24 nov. 2009 à 21:19
si tu met getchar()il va pas se fermer d'un coup
pour les erreur d'exécution je sait pas si il y a un méthode de la faire moi je fait des printf("") pour savoir quel est la boucle qui ne s'arrête pas
0
Docteur Cox Messages postés 105 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 8 décembre 2013 4
24 nov. 2009 à 22:11
Mais j'ai mis getchar() et il se ferme pareil... :S
Et je croyais qu'on pouvais pas faire de printf() avec la sdl sous windows...
0
nobie-cs Messages postés 155 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 15 mai 2010 17
24 nov. 2009 à 22:15
tu utilise code:blocks ?
SDL_Flip(ecran); 
il fait cette méthode ?
0
Docteur Cox Messages postés 105 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 8 décembre 2013 4
24 nov. 2009 à 22:26
oui j'utilise codeblocks, qu'est ce que tu veux dire par "cette méthode"?
0
nobie-cs Messages postés 155 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 15 mai 2010 17
24 nov. 2009 à 22:39
SDL_Flip(ecran);
il est a la fin du code source je sait pas se qu'il fait est je croit c'est elle qui ferme ton programme , utilise un printf(""); avant et après
0
Docteur Cox Messages postés 105 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 8 décembre 2013 4
27 nov. 2009 à 20:20
Non ça c'est la commande pour rafraichir l'écran...
Et les printf ça marche pas sous windows avec la SDL...
0