[ Foro de C ]

acerca de estructuras anidadas

05-Aug-2014 19:48
Invitado (sara)
2 Respuestas

La verdad que esa parte no me ha quedado muy claro, ya que he hecho un ejercicio propuesto y  no me ha salido bien la parte de estructuras anidadas, no me compila, me sale error a ver si me podéis ayudar un poco con este apartado.
Mil Gracias!

 
#include<stdio.h>
#include<string.h>
//Ampliar el programa del primer apartado de 5.5.2, para que el campo "duración"
// se almacene como minutos y segundos, usando un "struct" anidado que contenga a su vez estos dos campos.
 
	struct duracion
	{
		int minutos;
		int segundos;
	} duracion;
 
	struct
	{
		char titulo[100];
		char artista[100];
		float duracion;
		float tamanio;
	} cancion[100];
 
int main()
{
 
 
 
	int i = 0;
	int opcion = 0;
	int encontrado = 0;
	int num_canciones = 0;
	char nom_buscar[20];
	char input[20];
	char textotemporal[20];
	do
	{
		puts("Elige una opcion del menu");
		puts("1. Aniadir una nueva cancion");
		puts("2. Mostrar titulo de todas las canciones");
		puts("3. Buscar una cancion");
		puts("0. Salir.\n");
		gets(input);
		opcion = atoi(input);
		switch(opcion)
		{
			case 1:
 
				if (num_canciones<100)
				{
					printf("Introduce el titulo de la cancion:\n");
					printf("Elige una cancion que te guste y rellena los siguientes datos\n");
					gets(cancion[num_canciones].titulo);
					printf("Introduce el artista de la cancion:\n");
					gets(cancion[num_canciones].artista);
					printf("Introduce la duracion (min) de la cancion:\n");
					gets(input);
					gets(textotemporal);
					sscanf("%d",&cancion[num_canciones].duracion.minutos);
					printf("Introduce la duracion (seg) de la cancion:\n");
					gets(input);
					gets(textotemporal);
					scanf("%d",&cancion[num_canciones].duracion.segundos);
					printf("Introduce el tamanio de la cancion:\n");
					gets(input);
					cancion[num_canciones].tamanio = atof(input);
					num_canciones++;
					printf("%d\n", num_canciones);
					puts("");
				}
				else
				{
					printf("Se ha alcanzado el limite\n");
				}
			break;
			case 2:
				puts("====CANCIONES===\n");
				for(i=0; i<num_canciones; i++)
				{
					printf("%d\t%s\n", i + 1, cancion[i].titulo);
				}
				puts("");
			break;
			case 3:
				printf("Introduzca el nombre del titulo de la cancion para buscar:\n");
				gets(nom_buscar);
				encontrado = 0;
				for (i=0; i<num_canciones; i++)
				{
					if(strcmp(cancion[i].titulo, nom_buscar) == 0)
					{
						printf("Cancion encontrada: %s\n", cancion[i].titulo);
						encontrado = 1;
 
					}
				}
					if(!encontrado)
					puts("El nombre no pertenece a la lista\n");
 
				break;
		}
	}
	while(opcion!=0);
 
	return 0;
}
 




06-Aug-2014 05:54
Luis Torres (+12)

En la parte de declaración de variables no declaraste bien el campo duración del segundo struct, éste, en vez de float, debería ser del tipo struct duración. Revisa el tutorial de donde viene el ejercicio para que te des cuenta.

Creo que también, por allí, debes limpiar el buffer de entrada, de lo contrario de dará problemas cuando introduzcas los datos. Son muchas lecturas de datos que se hacen y, siempre da problemas, así que debes tener lista la instrucción para limpiar el buffer de entrada y colocarla donde corresponda (en varios lugares).


Saludos.


06-Aug-2014 11:21
Invitado (sara)

Muchas gracias por contestar, ya está todo claro :D






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)