[ Foro de C ]

problema con el ejercicio 5.6.3

26-Jun-2013 19:42
Jose Manuel Illanes Juan
1 Respuestas

Hola os voy a copiar el codigo del ejercicio 5.6.3.
El enunciado es:

Un programa que sea capaz de almacenar los datos de hasta 50 personas: nombre,
dirección, teléfono, edad (usando una tabla de structs). Deberá ir pidiendo los datos
uno por uno, hasta que un nombre se introduzca vacío (se pulse Intro sin teclear
nada). Entonces deberá aparecer un menú que permita:
o Mostrar la lista de todos los nombres.
o Mostrar las personas de una cierta edad.
o Mostrar las personas cuya inicial sea la que el usuario indique.
o Salir del programa
(lógicamente, este menú debe repetirse hasta que se escoja la opción de ?salir?).

He hecho el código y todo funciona bien salvo la opción 3 del menu, osea la parte en que se tiene que buscar un nombre por sus iniciales.

No se como hacerlo.
Os pongo mi codigo completo esperando que me ayuden en lo de buscar los nombres con las iniciales y si ven algún fallo más o algo mejorable diganmelo tambien.

Muchas gracias.

 
#include<stdio.h>
#include<string.h>
 
main()
{
 
/*lo primero que hacemos es definir la estructura que nos permitirá guardar
hasta 50 personas*/
 
	struct{
	char nombre[60];
	int telefono,edad;
	char direccion[100];
	}persona[50];
 
/*definimos el resto de variables útiles*/
 
	int i=0 ;/*la utilizaremos como contador*/
	int numeropersona=0; /*cuando llege a 50 debe avisarnos de que no hay mas espacio para almacenar más*/
	char textotemporal[60]; 
	int nombrepersona; /*lo utilizaremos para saber cuando se introduce un nombre en blanco*/
	int edadbuscar; /*para cuando buscamos personas con una determinada edad*/
	char inicialbuscar[3];/*para buscar los nombres por su inicial*/
	int opcion;/*para la opcion que eliga el usuario*/	
 
/*comienza el programa*/
/*lo primero es ir pidiendo datos de personas hasta que se introduzca un nombre en blanco*/
 
	do{
	printf("¿Cúal es el nombre de la persona %d?\n",numeropersona+1);
	gets(persona[numeropersona].nombre);
	if (strcmp(persona[numeropersona].nombre,"")==0)
	{nombrepersona=0;	
	break;}
	printf("Su telefono es:\n");
	gets(textotemporal);
	sscanf(textotemporal,"%d",&persona[numeropersona].telefono);
	printf("¿Que edad tiene?\n");
	gets(textotemporal);
	sscanf(textotemporal, "%d",&persona[numeropersona].edad);
	printf("¿Cuál es su dirección?\n");
	gets(persona[numeropersona].direccion);
	numeropersona++;
	}while(numeropersona<50);
 
	do{
 
	printf("Para ver el nombre de todas las personas pulse 1.\n");
	printf("Para ver las personas con una cierta edad pulse 2.\n");
	printf("Para buscar las personas por la inicial de su nombre pulse 3.\n");
	printf("Para salir pulse 4.\n");
	gets(textotemporal);
	sscanf(textotemporal,"%d",&opcion);	
 
	switch (opcion)
	{
	case 1: 
		for(i=0;i<numeropersona;i++)
		printf("El nombre de la persona numero %d es %s.\n",i+1,
	persona[i].nombre);
	break;
 
	case 2:
		printf("¿Que edad quieres buscar?\n");
		gets(textotemporal);
		sscanf(textotemporal,"%d",&edadbuscar);
	for(i=0;i<numeropersona;i++)
	if(edadbuscar==persona[i].edad)
	printf("La persona numero %d cuyo nombre es %s y su teléfono es %d tiene"
	" la edad buscada.\n",i+1,persona[i].nombre,persona[i].telefono);
	break;
 
	case 3:
		printf("¿Qué inicial quieres buscar?\n");
		gets(inicialbuscar);
	for(i=0;i<numeropersona;i++)
	if(strcmp(inicialbuscar,persona[i].nombre[0]==0))
	printf("La persona número %d comienza por dicha inicial. Sus datos son:"
	"Nombre:%s,edad:%d,teléfono:%d y dirección:%s.\n",i+1,
	persona[i].nombre,persona[i].edad,persona[i].telefono,
	persona[i].direccion);
	break;
 
	case 4: 
		printf("Fin del programa. Gracias por confiar en Chemakas kompany.\n");
	break;
	default:
		printf("Opción no válida.\n");
	break;
	}
	}while(opcion!=4);
 
}
 



27-Jun-2013 00:52
Nacho Cabanes (+30)

Si no funciona la parte 3, es que el fallo esta en esa parte. ;-)

Mira esto:

 
if(strcmp(inicialbuscar,persona[i].nombre[0]==0)) ...
 


Estas comparando una cadena con una letra, y eso no es aceptable para "strcmp", de modo que los resultados son impredecibles. Prueba a comparar una letra con otra letra:

 
if (inicialbuscar[0] == persona[i].nombre[0])  ...
 







(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.)