Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Inicializar tablas

Iniciado por SPARTANVS, 24 de Marzo de 2008, 09:31:06 PM

« anterior - próximo »

SPARTANVS

tengo la siguiente estructura:

struct habitacion
{
char text[150];
int norte;
int sur;
int este;
int oeste;
} habitaciones[50];


esa tabla "habitaciones quiero ponerla entera a 0, todos sus aparatados.

¿hay alguna forma a parte de inicializarlas todas 1 a 1 o esta?:

for (i=1; i<=50; i++)
{
habitaciones[i].text="x";
habitaciones[i].norte=0;
habitaciones[i].sur=0;
habitaciones[i].este=0;
habitaciones[i].oeste=0;
}



la mejor que me ha parecido es la del for, pero si hay una forma mas correcta o mas facil de inicializar pues mejor saberla.

GRACIAS

Zaelsius

Supongo que el código de arriba está escrito en C. Alternativamente, puedes usar la función memset() para inicializar una zona contigua de memoria a un valor determinado. Por ejemplo:

memset( habitaciones, 0, sizeof( habitaciones ) );

Usar memset() puede tener o no sentido, no es una solución general, pero es útil si quieres poner todos los bytes de tu struct a cero.

Tu bucle for también es válido, aunque la forma correcta sería:

for ( int i = 0; i < 50; i ++ )
{
strcpy( habitaciones[i].text, "x" );
...
...
}

Ojo con los vectores (el primer elemento tiene índice cero), y las cadenas no las puedes asignar felizmente como en otros lenguajes de alto nivel.

Mars Attacks

Cita de: "SPARTANVS"tengo la siguiente estructura:

struct habitacion
{
char text[150];
int norte;
int sur;
int este;
int oeste;
} habitaciones[50];


Si es C++, puedes hacerte un constructor de la estructura dentro de la propia estructura, tal que:

struct habitacion
{
habitacion(): text("x"), norte(0), sur(0), este(0), oeste(0) {}
char text[150];
int norte;
int sur;
int este;
int oeste;
} habitaciones[50];


Su inicialización sería automática. Bueno, no estoy seguro de si el text("x") colaría, pero siempre puedes poner el memset o strcpy anterior dentro del {} y dejar el resto como antes.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.