Ya he corregido los fallos que comentas, para strtok no hace falta el include string.h, puesto que a mi me funciona sin el. De hecho funciona todo el programa a excepcion de la última función, porque he ido probandolo por partes. Sigo teniendo problemas en la última funcion y leer , leo los mensajes de error del compilador, pero no siempre los entiendo e intento buscar información, pero no siempre encuentro respuestas.
Asi está el código ahora mismo y los errores que me aparecen. Gracias por responder.
Código:
#include <stdio.h>
#include <stdlib.h>
#define TAM 50
typedef struct
{
char nombre[30];
char apellido1[30];
int dni;
char sexo;
int edad;
} TPersona;
void cargar_txt(TPersona []);
void ver_persona(char [],TPersona []);
void persona_mayor(TPersona [],TPersona *);
int main()
{
TPersona personas[TAM];
TPersona mayor;
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(TPersona personas[TAM])
{
FILE *f;
TPersona p;
char *token;
f=fopen("PERSONAS.txt","r");
if(f==NULL)
{
printf("Error de apertura\n");
}
else
{
char cad[255];
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],TPersona 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++;
}
}
if(enc==0)printf("%s no se encuentra en el fichero\n",nombre);
}
void persona_mayor(TPersona personas[TAM],TPersona *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;
}
}
}
||=== Build: Debug in Entrega3 (compiler: GNU GCC Compiler) ===|
C:\Users\Francisco\Desktop\Tarea\Entrega3\main.c|| In function 'persona_mayor':|
C:\Users\Francisco\Desktop\Tarea\Entrega3\main.c|1 22|error: request for member 'nombre' in something not a structure or union|
C:\Users\Francisco\Desktop\Tarea\Entrega3\main.c|1 23|error: request for member 'apellido1' in something not a structure or union|
C:\Users\Francisco\Desktop\Tarea\Entrega3\main.c|1 24|error: request for member 'dni' in something not a structure or union|
C:\Users\Francisco\Desktop\Tarea\Entrega3\main.c|1 25|error: request for member 'sexo' in something not a structure or union|
C:\Users\Francisco\Desktop\Tarea\Entrega3\main.c|1 25|warning: passing argument 2 of 'strcpy' makes pointer from integer without a cast [enabled by default]|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7. 1\..\..\..\..\include\string.h|45|note: expected 'const char *' but argument is of type 'char'|
C:\Users\Francisco\Desktop\Tarea\Entrega3\main.c|1 26|error: request for member 'edad' in something not a structure or union|
||=== Build failed: 5 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|