![]() |
![]() |
| 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
|
|||
|
|||
|
Código:
// Funcion para definir nombres de los jugadores y quien empieza primero //
int TurnoInicial (int Jugadores)
{
char vec[Jugadores];
int i;
for (i=0; i<Jugadores; i++)
{
printf("Ingrese el nombre del jugador %d: ", i+1);
scanf ("%s", &vec[i]);
}
for (i=0; i<Jugadores; i++)
{
printf("El jugador %d se llama: %s\n", i+1, vec[i]);
}
}
Bueno, siguiendo con este juego y los problemas... ahora necesito que luego de determinar la cantidad de jugadores que participaran del juego, una funcion sea capaz de almacenar los nombres de los jugadores (ingresados por teclado), y guardalos en un vector de la cantidad de posiciones de la variable 'Jugadores'. Este vector será utilizado luego para desplegar el nombre del jugador en el momento que le toque su turno de tirar los dados por ejemplo. Con el código expuesto arriba, funciona bien hasta que ingreso el ultimo nombre por teclado. Luego el programa se cuelga. Pienso que el problema radica en la funcion scanf y en el %s . Quizas otro método de entrada para los strings funcione mejor en este caso, pero es la primera vez que manejo cadenas de caracteres en C. Por favor agradecería que me dieran una mano! Desde ya muchas gracias! |
|
#2
|
||||
|
||||
|
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]);
}
}
|
|
#3
|
|||
|
|||
|
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. |
|
#4
|
||||
|
||||
|
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 |
|