Ajuda juego en C [noob]

Hola , soy un poco noob en C y estoy programando un juego de poker por que de vez en cuando dejo de leer las lecciones y intento hacer algo por mi mismo pero al llegar a un bucle while justo despues de ejecutar la funcion inicio pone "Segmention Fault" y ya no tira.
[+risas]

Codigo:
#include <stdio.h>
#include <stdlib.h>
/*Variables para operaciones varias*/
char i;
char b;
char c;
/*Repite o finaliza el juego*/
char d;
/*Configuracion inicial init_var[1]=nombre de jugadores , init_var[2]=dinero disponible*/
unsigned int init_var[2];
char player_cards[4][5];
/*Lista de los nombres de las cartas*/
char card_name[52][30];
/*Variable para salir*/

void inicio(void);


int main(){
/*Asignacion del nombre de las cartas*/

card_name[1][30]="2 de picas";
card_name[2][30]="3 de picas";
card_name[3][30]="4 de picas";
card_name[4][30]="5 de picas";
card_name[5][30]="6 de picas";
card_name[6][30]="7 de picas";
card_name[7][30]="8 de picas";
card_name[8][30]="9 de picas";
card_name[9][30]="10 de picas";
card_name[10][30]="J de picas";
card_name[11][30]="Q de picas";
card_name[12][30]="K de picas";
card_name[13][30]="As de picas";
card_name[14][30]="2 de treboles";
card_name[15][30]="3 de treboles";
card_name[16][30]="4 de treboles";
card_name[17][30]="5 de treboles";
card_name[18][30]="6 de treboles";
card_name[19][30]="7 de treboles";
card_name[20][30]="8 de treboles";
card_name[21][30]="9 de treboles";
card_name[22][30]="10 de treboles";
card_name[23][30]="J de treboles";
card_name[24][30]="Q de treboles";
card_name[25][30]="K de treboles";
card_name[26][30]="As de treboles";
card_name[27][30]="2 de rombos";
card_name[28][30]="3 de rombos";
card_name[29][30]="4 de rombos";
card_name[30][30]="5 de rombos";
card_name[31][30]="6 de rombos";
card_name[32][30]="7 de rombos";
card_name[33][30]="8 de rombos";
card_name[34][30]="9 de rombos";
card_name[35][30]="10 de rombos";
card_name[36][30]="J de rombos";
card_name[37][30]="Q de rombos";
card_name[38][30]="K de rombos";
card_name[39][30]="As de rombos";
card_name[40][30]="2 de corazones";
card_name[41][30]="3 de corazones";
card_name[42][30]="4 de corazones";
card_name[43][30]="5 de corazones";
card_name[44][30]="6 de corazones";
card_name[45][30]="7 de corazones";
card_name[46][30]="8 de corazones";
card_name[47][30]="9 de corazones";
card_name[48][30]="10 de corazones";
card_name[49][30]="J de corazones";
card_name[50][30]="Q de corazones";
card_name[51][30]="K de corazones";
card_name[52][30]="As de corazones";

/*Asignacion del nombre de las cartas (Fin)*/
printf("------------Poklinux alpha v0.1 30/5/2010------------\n");
/*funcion para configurar los parametros de el inicio de la partida*/
inicio();


/*empieza la partida*/
d=0;

while(d==0){ <======Cuando se ejecuta este bucle pasa lo del segmention fault [+furioso]
for(i=0;i<init_var[1];i++){

for(b=0;b<5;i++){
while(player_cards[i][b]<53){
player_cards[i][b]=random();
}
}


}
}

return 0;
}

void inicio(void){
char cont='n';
while(cont=='n'){
init_var[1]=0;
init_var[2]=0;
while (init_var[1]<=1 || init_var[1]>4 ){
printf("Elija el numero de participantes\n");
scanf("%d",&init_var[1]);
if(init_var[1]<=1 || init_var[1]>4){
printf("El numero minimo de jugadores tiene que ser 2 y el maximo de 4\n");
}
}
while(init_var[2]<init_var[1]){
printf("Elija el dinero disponible para cada participante\n");
scanf("%d",&init_var[2]);
if(init_var[2]<init_var[1]){
printf("El numero de dinero para cada participante debe de ser igual o mayor al numero de participantes\n");
}
}
printf("numero de participantes: %d \n Dinero por participante %d \n Es esto correcto? y/n \n ",init_var[1],init_var[2]);
while(getchar()!='\n'){}/*Limpia el buffer para poder usar getchar(); */
cont=getchar();

}

}

Si alguien me ayudara le estaria muy agradecido por cierto si sirve de algo uso el compilador GCC y ubuntu de 32 bits.
"segmentation fault" ocurre cuando accedes a memoria que no debes, en este caso tienes errores por doquier, recuerda que en C los indices de los arrays comienzan en cero, y terminan en n-1 (siendo n la cantidad de elementos en la declaracion del array), al estar utilizando mal los indices, en algun momento llegas a acceder a memoria invalida. Un ejemplo es esto (debes revisar todos los indices, casi a todos los veo mal, ademas, por favor, utiliza el tag Code):
tienes:
unsigned int init_var[2];

y accedes de esta manera:
init_var[1]=0;
init_var[2]=0;

pero lo correcto es:
init_var[0]=0;
init_var[1]=0;
Muchas gracias , esta tarde intentare corregirlo me has sido de gran ayuda.
kappa64 escribió:Muchas gracias , esta tarde intentare corregirlo me has sido de gran ayuda.

Imagino que ya lo habrás corregido, pero ¿qué se supone que querías hacer con?:
card_name[1][30]="2 de picas";
card_name[2][30]="3 de picas";
card_name[3][30]="4 de picas";
card_name[4][30]="5 de picas";
card_name[5][30]="6 de picas";
...

Se supone que con eso card_name[i][j] (incluso asumiendo que quieres acceder en realidad a i-1 en vez de i y j-1 en vez de j), estarías accediendo a un único caracter.

La manera más sencilla (sin entrar en cosas muy avanzadas) sería usar "snprintf" para la copia de cadenas. Así de camino, podrías meterlo dentro de un bucle for.
Te recomiendo en cualquier caso, que antes de seguir, eches un vistazo a sitios como http://www.programacionfacil.com/cpp/start, que aunque sea de c++, te vendrá bien para aprender lo más básico.

Necesitas básicamente conocer mejor la noción de puntero y array estático, por lo pronto.
Suerte!
for(i=0;i<init_var[1];i++){

no deberias darle uin valor a init_var[1] antes de usarla¿?
4 respuestas