![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Tu código tal como lo expones no puede compilar puedes definir un array estático de un tamaño definido por una variable.
Una primera aproximación a tu problema sería definir un array de dos dimensiones, una para el número máximo de jugadores admitidos y otra para el tamaño de los nombres. Si ese array lo defines como variable global lo conocerán todas las funciones de tu juego. Este sería el ejemplo descrito: Código:
char Nombres[5][41]; // Cinco jugadores 40 caracteres por nombre (mas el nulo final)
int TurnoInicial (int Jugadores)
{
int i;
char Buffer[1024]; // Buffer para la entrada por teclado.
for(i = 0; i < Jugadores; i++){
printf("Ingrese el nombre del jugador %d: ", i+1);
strncpy(Nombres[i], gets(Buffer), 40); // aseguramos que no entran mas de 40 caracteres
}
for(i = 0; i < Jugadores; i++){
printf("El jugador %d se llama: %s\n", i+1, Nombres[i]);
}
}
|
|
#2
|
|||
|
|||
|
No sabes como te agradezco la ayuda Escafandra! Me estaba pelando las pestañas! Funciona de maravilla!!!
Código:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <time.h>
int tirarDados (void);
int transEntero (char);
int cantJugadores (void);
int elegirPuntuacion (void);
char ingresarNombres (int);
int Dados, Jugadores, puntuacionMax;
int main () {
char Nombres[Jugadores][40];
srand (time(NULL));
printf("!Bienvenidos al juego: EL PRESO!\n\n");
Jugadores = cantJugadores();
puntuacionMax = elegirPuntuacion();
Nombres[Jugadores][40] = 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 (2 a 5): ");
Jugadores = transEntero(getche());
printf("\n");
} while (Jugadores < 2 || Jugadores > 5);
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 < 50 || puntuacionMax > 200);
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 //
char ingresarNombres (int Jugadores)
{
int i;
char Nombres[Jugadores][40];
char Buffer[1024]; // Buffer para la entrada por teclado.
for(i = 0; i < Jugadores; i++)
{
printf("Ingrese el nombre del jugador %d: ", i+1);
strncpy(Nombres[i], gets(Buffer), 40); // aseguramos que no entran mas de 40 caracteres
}
for(i = 0; i < Jugadores; i++)
{
printf("El jugador %d se llama: %s\n", i+1, Nombres[i]);
}
return Nombres[Jugadores][40];
}
Por favor avisame si tienes alguna solución para ese pequeño problema. Desde ya muchas gracias por tu tiempo, es justo lo que necesitaba. Es un gran avance para mi.. ahora tengo que planear mejor en lapiz y papel la lógica del juego. |
|
#3
|
||||
|
||||
|
Cita:
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:
Saludos. Última edición por escafandra fecha: 01-09-2012 a las 22:40:43. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Un pedacito de México | AzidRain | La Taberna | 3 | 22-01-2012 13:34:32 |
| AYUDA por favor!!! | Melcv | Varios | 2 | 28-06-2006 21:19:35 |
| Codigo de barras + QuickReport ... Help por favor!!!! | jdelphi | Impresión | 3 | 29-01-2005 07:58:00 |
| Traducir un codigo de VB a Delphi ¡¡¡¡ Por favor !!!! | Betsa23 | Internet | 2 | 30-11-2004 16:29:35 |
| Ayuda por favor | jtellof | Conexión con bases de datos | 4 | 08-09-2003 21:56:24 |
|