lundi 22 mai 2017

subprogram causes Console to crash

this is my first post here, I usually find my problem in my code using this website but this is too specific for it to actually be on this website.

My code keeps crashing after a certain line, i can't figure out which one.

im not going to make you guys read all my code, here is what i think doesnt work

 void preparationButins(S_butins* Butins, S_train Train[], int players)
{
    // preparation de butins
    Butins->p250 = 4;
    Butins->p500 = 8;
    Butins->p750 = 8;
    Butins->p1000 = 4;

    // preparation de wagons
    int i, j;
    for(i = 0; i < players; i++)
    {
        // si i=0 (donc si le wagon est le wagon de tete, donner 2000 en butins et mettre le marshall dans ce train
        if(i == 0)
        {
            // tests
            printf("entering i == 0");
            Train->butin[0] = 2000;
            Train->marshall = 1;
        }
        else
        {
            printf("entering randomize butins");
            for(j = 0; j < NB_BUTINS; j++)
            {
                Train[i].butin[j] = randomizeButins(Butins);
            }
            printf("exiting bitch");
        }
    }
}

int randomizeButins(S_butins* Butins)
{

    // faut trouver un moyen de limiter les butins sans que la console crash
    int number;
    int r;
    printf("randomizing");
    r = (rand() % 4);
    printf("\n %d\n", r);
    printf("end of randomizing");
    if(r == 0)
    {
        number = 250;
    }
    if(r == 1)
    {
        number = 500;
    }
    if(r == 2)
    {
        number = 750;
    }
    if(r == 3)
    {
        number = 1000;
    }

    /* fait crasher console, mauvais code
        switch(r)
            {
            case 1:
                if(Butins->p250 <= 0)
                    {
                        randomizeButins(Butins);
                    }
                else
                    {
                        --Butins->p250;
                        number = 250;
                    }
                break;
            case 2:

                if(Butins->p500 <= 0)
                    {
                        randomizeButins(Butins);
                    }
                else
                    {
                        --Butins->p500;
                        number = 500;
                    }
                break;
            case 3:

                if(Butins->p750 <= 0)
                    {
                        randomizeButins(Butins);
                    }
                else
                    {
                        --Butins->p750;
                        number = 750;
                    }
                break;
            case 4:

                if(Butins->p1000 <= 0)
                    {
                        randomizeButins(Butins);
                    }
                else
                    {
                        --Butins->p1000;
                        number = 1000;
                    }
                break;
            default:
                printf("there was an error in randomize butins");
                break;
            }
                */
    return number;
}

here is my full code for reference

#include <stdio.h>
#include <stdlib.h>
#define MANCHE 4
#define MOTS 100
#define NB_BUTINS 4

// structure qui definit un joueur
typedef struct joueur
{
    char name[100];
    int playernumber;
    // il a 6 tirs dans le pistolet
    int pistolet;
    // il a 10 cartes de deplacement
    int deplacement;
    int changement;
    int braquage;
    int baston;
    int marshal;
    // on doit prendre en compte son argent ainsi que ou il est dans le jeu (dans le train en dehors)
    int money;
    int inTrain;
    int ballesTire;

} S_joueur;

// structure qui definit tout les butins dans le jeu
typedef struct butins
{
    int p250;
    int p500;
    int p750;
    int p1000;
} S_butins;

typedef struct train
{
    S_joueur joueurs[5];
    int butin[NB_BUTINS];
    // pour savoir si y a un marshall dans ce wagon
    int marshall;
} S_train;

/*******************************************PROTOTYPES***************************************************************/
int cbDeJoueurs();
int randomizeButins(S_butins* Butins);
void preparationButins(S_butins* Butins, S_train Train[], int players);
void preparationJoueurs(S_train Train[], S_joueur Joueurs[], int players);
void Display(S_train T[], S_butins B, S_joueur J[], int players);
/****************************************FIN DE PROTOTYPES************************************************************/

int main(int argc, char** argv)
{
    srand(time(NULL));
    int i;
    int players = cbDeJoueurs();

    S_train Train[players + 1];
    S_butins Butins;
    S_joueur Joueurs[players];

    preparationButins(&Butins, Train, Joueurs);
    preparationJoueurs(Train, Joueurs, players);
    Display(Train, Butins, Joueurs, players);
    for(i = 0; i < MANCHE; i++)
    {
    }
}

int cbDeJoueurs()
{
    int players;
    printf("combien y a t-il de joueurs ?\n");
    do
    {
        printf("Choisissez un chiffre entre 3 et 5\n");
        scanf("%d", &players);
    }
    while(players < 3 && players > 5);
    return players;
}

void preparationButins(S_butins* Butins, S_train Train[], int players)
{
    // preparation de butins
    Butins->p250 = 4;
    Butins->p500 = 8;
    Butins->p750 = 8;
    Butins->p1000 = 4;

    // preparation de wagons
    int i, j;
    for(i = 0; i < players; i++)
    {
        // si i=0 (donc si le wagon est le wagon de tete, donner 2000 en butins et mettre le marshall dans ce train
        if(i == 0)
        {
            // tests
            printf("entering i == 0");
            Train->butin[0] = 2000;
            Train->marshall = 1;
        }
        else
        {
            printf("entering randomize butins");
            for(j = 0; j < NB_BUTINS; j++)
            {
                Train[i].butin[j] = randomizeButins(Butins);
            }
            printf("exiting bitch");
        }
    }
}

void preparationJoueurs(S_train Train[], S_joueur Joueurs[], int players)
{
    int i;
    for(i = 0; i < players; i++)
    {

        // preparation de parametres du joueur

        printf("Quel est le nom du joueur?");
        scanf("%s", &Joueurs[i].name);
        Joueurs[i].playernumber = i;
        Joueurs[i].ballesTire = 0;
        Joueurs[i].baston = 1;
        Joueurs[i].braquage = 2;
        Joueurs[i].changement = 2;
        Joueurs[i].deplacement = 2;
        Joueurs[i].inTrain = 1;
        Joueurs[i].marshal = 1;
        Joueurs[i].money = 0;
        Joueurs[i].pistolet = 6;

        // placement de joueurs pairs / impairs dans les derniers wagons.
        if(i % 2 == 0)
        {
            Train[players - 1].joueurs[i] = Joueurs[i];
        }
        else if(i % 2 == 1)
        {
            Train[players].joueurs[i] = Joueurs[i];
        }
    }
}

int randomizeButins(S_butins* Butins)
{

    // faut trouver un moyen de limiter les butins sans que la console crash
    int number;
    int r;
    printf("randomizing");
    r = (rand() % 4);
    printf("\n %d\n", r);
    printf("end of randomizing");
    if(r == 0)
    {
        number = 250;
    }
    if(r == 1)
    {
        number = 500;
    }
    if(r == 2)
    {
        number = 750;
    }
    if(r == 3)
    {
        number = 1000;
    }

    /* fait crasher console, mauvais code
        switch(r)
            {
            case 1:
                if(Butins->p250 <= 0)
                    {
                        randomizeButins(Butins);
                    }
                else
                    {
                        --Butins->p250;
                        number = 250;
                    }
                break;
            case 2:

                if(Butins->p500 <= 0)
                    {
                        randomizeButins(Butins);
                    }
                else
                    {
                        --Butins->p500;
                        number = 500;
                    }
                break;
            case 3:

                if(Butins->p750 <= 0)
                    {
                        randomizeButins(Butins);
                    }
                else
                    {
                        --Butins->p750;
                        number = 750;
                    }
                break;
            case 4:

                if(Butins->p1000 <= 0)
                    {
                        randomizeButins(Butins);
                    }
                else
                    {
                        --Butins->p1000;
                        number = 1000;
                    }
                break;
            default:
                printf("there was an error in randomize butins");
                break;
            }
                */
    return number;
}

void Display(S_train T[], S_butins B, S_joueur J[], int players)
{
    int i, j;
    printf("    ");
    for(i = 0; i < players; i++)
    {
        printf("  ");
        for(j = 0; j < 5; j++)
        {
            if(T[i].joueurs[j].inTrain == 0)
            {

                // have to insert color depending on player
                // ************************************************************
                printf("%d", T[i].joueurs[j].playernumber);
            }
        }
        printf("  ");
    }
    printf("\n    ");
    // line between top of train and bottom
    for(i = 0; i < players; i++)
    {
        printf("____");
    }
    printf("\n/|");
    // inside the train
    for(i = 0; i < players; i++)
    {
        printf("  ");
        if(T[i].marshall == 1)
        printf("M");
        for(j = 0; j < 5; j++)
        {
            if(T[i].joueurs[j].inTrain == 1)
            {
                // have to insert color depending on player
                printf("%d", T[i].joueurs[j].playernumber);
            }
        }
        printf("  ");
    }
}




Aucun commentaire:

Enregistrer un commentaire