Tableau de valeurs aléatoires

Résolu/Fermé
amn3zia Messages postés 5 Date d'inscription mercredi 16 mars 2016 Statut Membre Dernière intervention 26 avril 2016 - 15 avril 2016 à 19:21
amn3zia Messages postés 5 Date d'inscription mercredi 16 mars 2016 Statut Membre Dernière intervention 26 avril 2016 - 18 avril 2016 à 17:42
Bonjour, je dois faire une fonction créant deux tableaux de valeurs aléatoires mais je ne sais pas où sont mes erreurs, lorsque je compile ça plante.
Voici mon code:

int main()
{
int taille;
map *grid;
printf("Entrez la taille : ");
scanf("%d", &taille);
grid = mapcreator(taille); //allocation
int tabx[nbbomb];
int taby[nbbomb];
bombpos(grid,tabx[nbbomb],taby[nbbomb]);
return 0;
} //pour le main

map* mapcreator(int N)
{
map *grid;
int i;
grid = (map*)malloc(sizeof(map));
grid->size = N;
grid->tab = (casee**)malloc(grid->size*sizeof(casee*));
for (i=0;i<grid->size;i++)
{
grid->tab[i] = (casee*)malloc(grid->size*sizeof(casee));
}
return grid;
}
//dans le .c qui loue de l'espace pour un tableau à deux dimensions (pas de rapport avec les tableaux de valeurs aléatoires)


void bombpos(map *grid,int tabx[],int taby[]); //le prototype


void bombpos(map *grid,int tabx[nbbomb],int taby[nbbomb])
{
srand(time(NULL));
int i=0;
int j;
for (i=0;i<nbbomb;i++)
{
tabx[i]=random(0,grid->size);
taby[i]=random(0,grid->size);
}
for (j=0;j<nbbomb;j++)
{
printf("x=%d ",tabx[j]);
printf("y=%d ",taby[j]);
}
} //fonction qui créé deux tableaux remplt de valeurs aléatoires


int random(int a, int b){
return rand()%(b-a)+a;
} //fonction qui créé une valeur entre a et b


typedef struct
{
char content;
}casee;

typedef struct
{
int size;
casee** tab;
}map;

// dans mon .h avec #define nbbomb grid->size/2

Désolé si c'est un peu long =/
Mais le truc c'est que lorsque je met le code de ma fonction bombpos() directement dans mon main ca m'affiche bien mes valeurs aléatoires je pense donc que c'est un problème d'appel de fonction mais je ne trouve pas après avoir chercher sur plein de forums, ça fait 3 jours que je block...
Merci de votre aide =)

1 réponse

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
16 avril 2016 à 12:24
Bonjour,

Pour passer en paramètre un tableau, on doit passer le nom du tableau, il est impossible de passer la taille du tableau (en réalité la fonction recevra un pointeur qui permet d'accéder aux éléments).

dans main() remplacer bombpos(grid,tabx[nbbomb],taby[nbbomb]); par bombpos(grid,tabx,taby);
La déclaration de la fonction doit être comme ton prototype void bombpos(map *grid,int tabx[],int taby[]){.....

Ne pas faire de #define sans parenthèses et éviter à tout prix les #define qui utilisent des données non constantes.

Ne pas définir des struct anonymes, il risque d'y avoir des problèmes à l'édition des liens. Tu peux utiliser le même nom que le typedef
typedef struct casee
{
char content; 
} casee;

On ne peut pas utiliser une donnée non déclarée ou définie avant. L'ordre des types et fonctions dans ton code n'est pas le bon.
0
amn3zia Messages postés 5 Date d'inscription mercredi 16 mars 2016 Statut Membre Dernière intervention 26 avril 2016
18 avril 2016 à 17:42
Aaaaah ok, rester blocké sur une erreur comme ça c'est un peu génant...
Merci beaucoup pour ta réponse rapide en tout cas =)
0