Código:
Buenas, estoy a punto de terminar el ejercicio pero me falla la función persona_mayor que os marco en rojo. Lo demás funciona sin problemas. La idea es que pasado el array de estructura con personas, me almacene en el puntero mayor, lo datos de la persona con mayor edad. A ver si me podeis echar un cable, por favor. Gracias.#include <stdio.h> #include <stdlib.h> #define TAM 50 typedef struct { char nombre[30]; char apellido1[30]; int dni; char sexo; int edad; } Persona; void cargar_txt(Persona []); void ver_persona(char [],Persona []); void persona_mayor(Persona [],Persona *); int main() { Persona personas[TAM]; Persona mayor={"","",0,"",0}; cargar_txt(personas); char nombre[30]; printf("La persona mayor de edad es:\n"); persona_mayor(personas,&mayor); printf("\nVer datos de una persona\n"); printf("Que persona quieres ver?\n"); scanf("%s",&nombre); ver_persona(nombre,personas); return 0; } void cargar_txt(Persona personas[TAM]) { FILE *f; Persona p; char *token; f=fopen("PERSONAS.txt","r"); if(f==NULL) { printf("Error de apertura\n"); } else { char cad[250]; int cont=0,per=0; fgets(cad,255,f); while(!feof(f)) { token = strtok(cad, ","); /*Separamos por espacios*/ while (token != NULL) { switch(cont) { case 0: strcpy(p.nombre,token); break; case 1: strcpy(p.apellido1,token); break; case 2: p.dni=atoi(token); break; case 3: p.sexo=token[0]; break; case 4: p.edad=atoi(token); break; } cont++; token = strtok(NULL,","); } personas[per]=p; cont=0; per++; fgets(cad,255,f); } fclose(f); } } void ver_persona(char nombre[30],Persona personas[TAM]) { int i=0,enc=0; while(i<TAM && !enc) { if(strcmp(personas[i].nombre,nombre)==0) { printf("Nombre: %s\n",personas[i].nombre); printf("Apellido: %s\n",personas[i].apellido1); printf("DNI: %d\n",personas[i].dni); printf("Sexo: %c\n",personas[i].sexo); printf("Edad: %d\n",personas[i].edad); enc=1; } else { i++; } } } void persona_mayor(Persona personas[TAM],Persona *mayor) { int i; int edad=personas[0].edad; printf("%d",personas[0].edad); for(i=0; i<TAM; i++) { if(personas[i].edad>=edad) { strcpy(*mayor.nombre,personas[i].nombre); strcpy(*mayor.apellido1,personas[i].apellido1); *mayor.dni=personas[i].dni; strcpy(*mayor.sexo,personas[i].sexo); *mayor.edad=personas[i].edad; } } }
Estos son los errores que me muestra, pero no se como corregirlos:
C:\Users\Francisco\Desktop\Entrega3\tarea\main.c|| In function 'persona_mayor':|
C:\Users\Francisco\Desktop\Entrega3\tarea\main.c|1 16|warning: incompatible implicit declaration of built-in function 'strcpy' [enabled by default]|
C:\Users\Francisco\Desktop\Entrega3\tarea\main.c|1 16|error: request for member 'nombre' in something not a structure or union|
C:\Users\Francisco\Desktop\Entrega3\tarea\main.c|1 17|error: request for member 'apellido1' in something not a structure or union|
C:\Users\Francisco\Desktop\Entrega3\tarea\main.c|1 18|error: request for member 'dni' in something not a structure or union|
C:\Users\Francisco\Desktop\Entrega3\tarea\main.c|1 19|error: request for member 'sexo' in something not a structure or union|
C:\Users\Francisco\Desktop\Entrega3\tarea\main.c|1 19|warning: passing argument 2 of 'strcpy' makes pointer from integer without a cast [enabled by default]|
C:\Users\Francisco\Desktop\Entrega3\tarea\main.c|1 19|note: expected 'const char *' but argument is of type 'char'|
C:\Users\Francisco\Desktop\Entrega3\tarea\main.c|1 20|error: request for member 'edad' in something not a structure or union|