[ Foro de C ]

Ficheros

11-Nov-2014 07:23
Invitado (Luis)
5 Respuestas

Ejercicio 5.6.2


switch(opcion)
		{
			case 0: printf("\nSaliendo del programa\n\n ");
					break;
			case 1: printf("\nIngrese el mes: ");
					scanf("%d",&elige);
					printf("\nLas personas que cumplen años son: ");
					for(i=0;i<=1;i++){
						if (persona[i].mes_nac==elige)
								printf("%s ",persona[i].nom);
					}
					pausa();
					break;
			default: printf("Error no se ingreso nada!!");
					 pausa();
					 break;

}
La pregunta es porque no me ingresa al if (persona[i].mes_nac==elige) si ya teniendo cargado el fichero e ingresando un numero de mes guardado me pasa del largo el if. O deberia preguntarlo de otra forma?


11-Nov-2014 09:27
Nacho Cabanes (+84)

El "for"y el "if" parecen correctos. Sí debería entrar, aunque sólo comparas dos personas (la 0 y la 1). Quizá el problema sea ese, o algo que arrastres desde otra parte del programa.


11-Nov-2014 13:40
Invitado (Luis)

Este es el algoritmo entero


#include <stdio.h>
#include <string.h>

struct
{
	char nom[30];
	int dia_nac;
	int mes_nac;
	int anio_nac;
}persona[2];

char temporal[30];
int i,opcion;
int elige;

void pausa()
{
	getchar();
}

main()
{
	for(i=0;i<=1;i++){
		printf(" %d-\n",i+1);
		printf("\nIngrese su nombre: ");	
		gets(persona[i].nom);
		printf("\nIngrese el dia de su nacimiento: ");
		gets(temporal);
		sscanf(temporal,"ld",&persona[i].dia_nac);
		printf("\nIngrese el mes de su nacimiento: ");
		gets(temporal);
		sscanf(temporal,"ld",&persona[i].mes_nac);
		printf("\nIngrese el año en que nacio: ");
		gets(temporal);
		sscanf(temporal,"ld",&persona[i].anio_nac);
	}
	
        do{
		
		printf("\t\t..:Menu:..\n");
		printf("\n0.- Si desea salir ");
		printf("\n1.- Buscar ");
		printf("\n\nOpcion: ");
		
		scanf("%d",&opcion);
		
		switch(opcion)
		{
			case 0: printf("\nSaliendo del programa\n\n ");
					break;
			case 1: printf("\nIngrese el mes: ");
					scanf("%d",&elige);
					printf("\nLas personas que cumplen años son: ");
					for(i=0;i<=1;i++){
						if (persona[i].mes_nac==elige)
								printf("%s ",persona[i].nom);
					}
					pausa();
					break;
			default: printf("Error no se ingreso nada!!");
					 pausa();
					 break;
		}
	}while(opcion!=0);
	for(i=0;i<=1;i++){
		printf("Nombre: %s\n",persona[i].nom);
	}
	getchar();
}


Solamente deje dos personas para no cargar tanto, había ingresado hasta 5 pero aun así no pasaba dentro del if, es la única parte que no funciona lo demás va bien. Por eso me llama mucho la atención. Desde ya muy agradecido por tu respuesta.


11-Nov-2014 15:56
Nacho Cabanes (+84)

Efectivamente, el error está fuera de las líneas que habías puesto inicialmente:


sscanf(temporal,"ld",&persona[i].mes_nac);


Ese formato no es correcto, debería ser "%d". Imagino que estás usando algún entorno antiguo, como Dev-C++. Te recomiendo que uses una máquina virtual de Linux y con Geany como editor. Esos errores (y algún otro más que tiene tu programa) te los avisará un compilador moderno como el GCC de Linux.


11-Nov-2014 16:45
Invitado (Luis )

Si justamente uso linux, edito todo desde kwrite y realizo todo desde consola con gcc. Estaba probando el debbuger gdb pero mucho no entendi mucho su funcionamiento.
Cuando compilo este código no me tira ningún error, por eso me llamaba la atención
Muy agradecido con tu rapida respuesta.


12-Nov-2014 00:00
Nacho Cabanes (+84)

Errores no da, pero sí varios "warnings", que el GCC de Linux debería mostrarte: el código de formato de los "sscanf" es incorrecto, "gets" es una orden obsoleta, "main" debería devolver un valor...

Si compilas desde línea de comandos, es recomendable que añadas la opción "-Wall" para que te muestre todos los warnings. Te ayudará a descubrir errores como esos.






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