Cita:
Empezado por m1kevil
Tuve un problema al declarar la variable char Nombres[Jugadores][40] globalmente... me tira un error el compilador diciendo: "variable-size type declared outside of any function" , lo cual es logico, pero justamente debería pasar eso.. :S Asique tuve que declararla en el main y en la funcion.
|
Ya te expliqué que no puedes declarar arrays estáticos dando el tamaño en una variable, debe ser una constante. Un array no puede tomar un valor así como así. En C un array es un puntero al primer elemento. Si tienes un array declarado como estático, no puede tomar otro valor. Lo podrá tomar un puntero char** (puntero a puntero) al ser de dos dimensiones. Pero creo que esto, de momento no lo vas a entender.
Para los valores constantes en toda la aplicación es mejor definirlos al principio, así los puedes cambiar fácilmente si es necesario.
Mira esta adaptación de tu programa, en la que he modificado también la anterior función
ingresarNombres para hacerla mas segura contra el desbordamiento de buffer:
Código:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <time.h>
#define MIN_JUGADORES 2
#define MAX_JUGADORES 5
#define MIN_PUNTUACION 50
#define MAX_PUNTUACION 200
#define MAX_NOMBRE 40
char Nombres[MAX_JUGADORES][MAX_NOMBRE + 1];
int tirarDados (void);
int transEntero (char);
int cantJugadores (void);
int elegirPuntuacion (void);
void ingresarNombres (int);
int Dados, Jugadores, puntuacionMax;
int main(int argc, char* argv[])
{
srand (time(NULL));
printf("!Bienvenidos al juego: EL PRESO!\n\n");
Jugadores = cantJugadores();
puntuacionMax = elegirPuntuacion();
ingresarNombres(Jugadores);
tirarDados();
system("pause");
return EXIT_SUCCESS;
}
// Funcion para tirar los dados //
int tirarDados (void)
{
Dados = rand() % 11+2;
printf("Arrojas los dados. Has sacado %d! \n", Dados);
return Dados;
}
// Funcion para pasar de char a entero //
int transEntero(char s)
{
return s - '0';
}
// Funcion para validar la cantidad de jugadores al principio del juego//
int cantJugadores ()
{
do{
printf("Ingrese la cantidad de jugadores (%d a %d): ", MIN_JUGADORES, MAX_JUGADORES);
Jugadores = transEntero(getche());
printf("\n");
}while (Jugadores < MIN_JUGADORES || Jugadores > MAX_JUGADORES);
printf("Los participantes del juego seran %d.\n\n", Jugadores);
return Jugadores;
}
// Funcion para elegir la maxima puntuacion al ppio del juego //
int elegirPuntuacion ()
{
char buffer [256];
do{
printf("Determine la cantidad de presos que se permiten dejar escapar (50 a 200): ");
fgets (buffer, 256, stdin);
puntuacionMax = atoi(buffer);
} while(puntuacionMax < MIN_PUNTUACION || puntuacionMax > MAX_PUNTUACION);
printf("No podran escaparse mas de %d presos. Si esto ocurre, el jugador pierde. A Jugar!!! \n\n", puntuacionMax);
return puntuacionMax;
}
// Funcion para definir nombres de los jugadores //
void ingresarNombres (int Jugadores)
{
int i, n;
for(i = 0; i < Jugadores; i++){
printf("Ingrese el nombre del jugador %d: ", i+1);
n = strlen(fgets(Nombres[i], MAX_NOMBRE, stdin))-1;
if(Nombres[i][n] == '\n') Nombres[i][n] = 0;
}
for(i = 0; i < Jugadores; i++){
printf("El jugador %d se llama: %s\n", i+1, Nombres[i]);
}
}
Cita:
Empezado por m1kevil
Es un gran avance para mi.. ahora tengo que planear mejor en lapiz y papel la lógica del juego.
|
Eso es fundamental.
Saludos.