Mi problema es el siguiente. en el juego conecta 4 me piden que haga un menu donde una de las opciones es que registre todos los juegos realizados (Nombre y cedula de cada jugador). El problema es que a medida que voy eligiendo un jugador nuevo me borra el anterior. Me pueden ayudar con esto? Les dejo el codigo
Código
//* JUEGO CONECTA 4*// /*Librerias utilizadas*/ #include <stdlib.h> #include <stdio.h> #define DIM 16 /*Constante utilizada para definir la maxima dimension del tablero*/ struct partidas1{ char nom_jug[40]; char ced_jug[8]; }partidas1[500]; struct partidas2{ char nom_jug[40]; char ced_jug[8]; }partidas2[500]; struct ganadores{ char jganador; }ganadores[1000]; int partida, aux2,aux3; char nom_jug[40]; char ced_jug[8]; /*PROCEDIMIENTOS Y FUNCIONES*/ void inicializar_tablero(char tablero[][DIM],int); int juegan_O_(char tabla[][DIM],int,int); int juegan_X_(char tablero[][DIM],int,int); int cuatro_en_linea(char tablero[][DIM],int); int limpiar(char nom_jug[]); int inicia1 = 0; int inicia2 = 0, jugar=1; int main() { char tablero[DIM][DIM]; int x,opcion,victoria=1,nombre1,nombre2,contador=1,correcta=1,aux=1,sumador = 0; do { system("cls"); printf("\n\n\n JUEGO CUATRO EN LINEA\n\n\n\n\n"); printf(" 1) Ingresar datos del primer jugador\n\n"); printf(" 2) Ingresar datos del segundo jugador\n\n"); printf(" 3) Jugar\n\n"); printf(" 4) Listar todos los juegos realizados\n\n"); printf(" 5) Salir\n\n\n"); if (contador%2==0) { printf(" Error: Antes de jugar debe ingresar los datos de los dos jugadores. \n\n\n"); printf(" REINGRESE SU OPCION: "); contador--; } if (correcta%2==0) { printf(" Opcion incorrecta \n\n\n"); printf(" REINGRESE SU OPCION: "); correcta--; } if (aux%2==0) { printf(" No se han realizado juegos. \n\n\n"); aux--; } scanf("%d",&opcion); system("cls"); switch (opcion) { case 1: /*OPCION 1 DEL MENU*/ { limpiar(nom_jug); limpiar(ced_jug); while(getchar() != '\n'); printf("\n Ingrese su Nombre: "); do { scanf("%39[^\n]",partidas1[inicia1].nom_jug); if (partidas1[inicia1].nom_jug[0]=='\0') { printf(" ERROR\n"); printf(" Ingrese nuevamente Nombre: "); } else { for (nombre1=0;nombre1<40;nombre1++) { nom_jug[nombre1]; } }while(getchar() != '\n'); system("cls"); }while(partidas1[inicia1].nom_jug[0]=='\0'); printf("\n Ingrese su cedula: "); do { scanf("%8[^\n]",partidas1[inicia1].ced_jug); if (partidas1[inicia1].ced_jug[0]=='\0') { printf(" ERROR\n"); printf(" Ingrese nuevamente su cedula: "); } else { for (nombre1=0;nombre1<8;nombre1++) { ced_jug[nombre1]; } system("cls"); printf("\n"); }while(getchar() != '\n'); }while(partidas1[inicia1].ced_jug[0]=='\0'); printf("\n DATOS INGRESADOS\n"); printf("\n\n Nombre ingresado: %s",partidas1[inicia1].nom_jug); printf("\n\n Cedula ingresada: %s",partidas1[inicia1].ced_jug); printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n presione ENTER para volver al menu"); partidas1[inicia1+1]=partidas1[inicia1]; jugar++; break; } case 2: /*OPCION 2 DEL MENU*/ { limpiar(nom_jug); limpiar(ced_jug); while(getchar() != '\n'); printf("\n Ingrese su Nombre: "); do { scanf("%39[^\n]",partidas2[inicia2].nom_jug); if (partidas2[inicia2].nom_jug[0]=='\0') { printf(" ERROR\n"); printf(" Ingrese nuevamente Nombre: "); } else { for (nombre2=0;nombre2<40;nombre2++) { nom_jug[nombre2]; } }while(getchar() != '\n'); system("cls"); }while(partidas2[inicia2].nom_jug[0]=='\0'); printf("\n Ingrese su cedula: "); do { scanf("%8[^\n]",partidas2[inicia2].ced_jug); do if (partidas2[inicia2].ced_jug[0]=='\0') { printf(" ERROR\n"); printf(" Ingrese nuevamente su cedula: "); } else { for (nombre2=0;nombre2<8;nombre2++) { ced_jug[nombre2]; } system("cls"); printf("\n"); }while(getchar() != '\n'); }while(partidas2[inicia2].ced_jug[0]=='\0'); printf("\n DATOS INGRESADOS\n"); printf("\n\n Nombre ingresado: %s",partidas2[inicia2].nom_jug); printf("\n\n Cedula ingresada: %s",partidas2[inicia2].ced_jug); printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n presione ENTER para volver al menu"); partidas2[inicia2+1]=partidas2[inicia2]; jugar++; break; } case 3: /*OPCION 3 DEL MENU*/ { if (jugar<3) { contador++; } else { cuatro_en_linea(tablero,opcion); sumador++; } break; } case 4: /*OPCION 4 DEL MENU*/ { if (sumador<1) { aux++; } else { partida=1; aux2=0; aux3=0; for(partida;partida<sumador+1;partida++){ printf("Partida %d\n",partida); printf("\n"); printf("Jugador 1: %s\n",partidas1[inicia1].nom_jug); printf("Cedula: %s\n",partidas1[inicia1].ced_jug); printf("Jugador 2: %s\n",partidas2[inicia2].nom_jug); printf("Cedula: %s\n",partidas2[inicia2].ced_jug); aux2++; printf("\n"); } } system("PAUSE"); break; } case 5: /*OPCION 5 DEL MENU*/ { return printf("\n\n SALIENDO\n\n"); break; default: correcta++; break; } }while (getchar()!='\n'); }while (victoria==1); } int cuatro_en_linea(char tablero[DIM][DIM],int x) { /*Defino distintas variables que voy a utilizar a lo largo del programa*/ int n=0,i,j,resto=1,k=0,jugador,partida,victoria=0; char d; printf("\n\nIngresa la dimension del tablero de juego(4-15): "); /*Analizamos si la dimension del tablero ingresada es valida*/ do { scanf (" %d",&x); system("cls"); if (x<4 || x>15) { printf("\nOpcion no valida. Ingresa la dimension (4-15): "); } while (getchar()!='\n'); } while (x<4 || x>15); system("cls"); /*Elegimos judagor*/ printf("\n ELIJA JUGADOR\n\n\n"); printf("\n\n 1) JUGADOR 1 (X)\n"); printf("\n\n 2) JUGADOR 2 (O)\n"); do { scanf("%d",&jugador); if ((jugador!=1) && (jugador!=2)) { printf("\n Error: Los jugadores posibles son 1 y 2 "); } }while ((getchar()!='\n') || ((jugador!=1) && (jugador!=2))); do { system("cls"); printf("\n\n\n\n"); inicializar_tablero(tablero,x); while ((resto<=(x*x)) && (victoria!=1)) { if (jugador==1) { jugador++; juegan_X_(tablero,x,n); /* Evaluo si el jugador 1 (X) gana*/ for (i=1;i<=x;i++) { for (j=1;j<=x;j++) { /*Verifico si hay cuatro en linea horizontal para Jugador 1*/ if ((tablero[i][j]=='X') && ((tablero[i][j+1])=='X') && ((tablero[i][j+2])=='X') && ((tablero[i][j+3])=='X')) { victoria = 1; } /*Verifico si hay cuatro en linea vertical para Jugador 1*/ else if ((tablero[i][j]=='X') && ((tablero[i+1][j])=='X') && ((tablero[i+2][j])=='X') && ((tablero[i+3][j])=='X')) { victoria = 1; } /*Verifico si hay cuatro en linea en diagonal ascendiente para Jugador 1*/ else if ((tablero[i][j]=='X') && ((tablero[i+1][j-1])=='X') && ((tablero[i+2][j-2])=='X') && ((tablero[i+3][j-3])=='X')) { victoria = 1; } /*Verifico si hay cuatro en linea en diagonal descendiente para Jugador 1*/ else if ((tablero[i][j]=='X') && ((tablero[i+1][j+1])=='X') && ((tablero[i+2][j+2])=='X') && ((tablero[i+3][j+3])=='X')) { victoria = 1; } } } if (victoria == 1) { printf("\n\n FELICITACIONES %s",partidas1[inicia1].nom_jug); printf("!!!\n\n Has ganado la partida.\n\n\n\n\n\n"); if(partidas1[inicia1].nom_jug[40]==partidas1[inicia1+1].nom_jug[40]){ partidas1[inicia1+2]=partidas1[inicia1+1]; inicia1++; } } else { resto++; } } else if (jugador == 2) { jugador--; juegan_O_(tablero,x,n); /* Evaluo si el jugador 2 (O) gana*/ for (i=1;i<=x;i++) { for (j=1;j<=x;j++) { /*Verifico si hay cuatro en linea horizontal para Jugador 1*/ if ((tablero[i][j]=='O') && ((tablero[i][j+1])=='O') && ((tablero[i][j+2])=='O') && ((tablero[i][j+3])=='O')) { victoria = 1; } /*Verifico si hay cuatro en linea vertical para Jugador 1*/ else if ((tablero[i][j]=='O') && ((tablero[i+1][j])=='O') && ((tablero[i+2][j])=='O') && ((tablero[i+3][j])=='O')) { victoria = 1; } /*Verifico si hay cuatro en linea en diagonal ascendiente para Jugador 2*/ else if ((tablero[i][j]=='O') && ((tablero[i+1][j-1])=='O') && ((tablero[i+2][j-2])=='O') && ((tablero[i+3][j-3])=='O')) { victoria = 1; } /*Verifico si hay cuatro en linea en diagonal descendiente para Jugador 2*/ else if ((tablero[i][j]=='O') && ((tablero[i+1][j+1])=='O') && ((tablero[i+2][j+2])=='O') && ((tablero[i+3][j+3])=='O')) { victoria = 1; } } } if (victoria == 1) { printf("\n\n FELICITACIONES %s",partidas2[inicia2].nom_jug); printf("!!!\n\n Has ganado la partida.\n\n\n\n\n\n"); if(partidas2[inicia2].nom_jug[40]==partidas2[inicia2+1].nom_jug[40]){ partidas2[inicia2+2]=partidas2[inicia2+1]; inicia2++; } } else { resto++; } } /*Si el tablero se lleno de fichas y no hay cuatro en linea el partido termina en empate*/ if (resto > (x*x) && (victoria!=1)) { printf("\n\n EMPATE\n\n"); } } }while ((resto<=(x*x)) && (victoria!=1)); system("PAUSE"); resto = 1; victoria = 0; system("cls"); inicializar_tablero(tablero,x); system("cls"); } /* Procedimiento para imprimir el tablero inicial*/ void inicializar_tablero(char tablero[DIM][DIM],int x) { int i,j; int contador = 1; for (i=1; i<=x; i++) { for (j=1;j<=x; j++) { printf(" "); printf(" %c",tablero[i][j]='.'); } printf("\n\n"); } for (i=1;i<=x;i++) { printf(" %d",contador); contador++; } printf("\n"); } /*Funcion para hacer jugada para el jugador 1*/ int juegan_X_(char tablero[DIM][DIM],int x,int n) { int i,j,k,contador=1; do { printf("\n\n Juega %s: \n",partidas1[inicia1].nom_jug); scanf ("%d",&n); if (n<1 || n>x) { printf("Error: las columnas posibles son de 1 a %d",x); while (getchar()!='\n'); } else if (tablero[1][n]!='.') { printf("\nError: la columna ya esta llena.\n "); } }while((n<1 || n>x) || (tablero[1][n]!='.')); for (k=x;k>=1;k--) { if (tablero[k][n]!='.') { continue; } else { tablero[k][n]='X'; break; } } system("cls"); printf("\n Ultima jugada X: Columna %d\n",n); printf("\n\n"); for (i=1;i<=x;i++) { for (j=1;j<=x;j++) { printf(" "); printf (" %c",tablero[i][j]); } printf("\n\n"); } for (i=1;i<=x;i++) { printf(" %d",contador); contador++; } printf("\n"); } /*Funcion para hacer jugada para el jugador 2*/ int juegan_O_(char tablero[DIM][DIM],int x,int n) { int i,j,k,contador=1; do { printf("\n\n Juega %s: ",partidas2[inicia2].nom_jug); scanf ("%d",&n); if (n<1 || n>x) { printf("Error: las columnas posibles son de 1 a %d",x); while (getchar()!='\n'); } else if (tablero[1][n]!='.') { printf("\nError: la columna ya esta llena.\n "); } }while((n<1 || n>x) || (tablero[1][n]!='.')); for (k=x;k>=1;k--) { if (tablero[k][n]!='.') { continue; } else { tablero[k][n]='O'; break; } } system("cls"); printf("\n Ultima jugada O: Columna %d\n",n); printf("\n\n"); for (i=1;i<=x;i++) { for (j=1;j<=x;j++) { printf(" "); printf (" %c",tablero[i][j]); } printf("\n\n"); } for (i=1;i<=x;i++) { printf(" %d",contador); contador++; } printf("\n"); } int limpiar(char nom_jug[40]) { int t; for (t=0; t<40; t++) { nom_jug[t]='\0'; } }