Puedes poner los registros en memoria y hacer las operaciones con el.
De otra manera sera muy engorroso.
Código C:
Ver original#include <stdio.h>
#include <stdlib.h>
struct registro
{
int id, dia, mes;
float hora;
char nombre[15];
};
int cmp(const void *a, const void *b) {
if( ((struct registro*)a)->hora < ((struct registro*)b)->hora )
return -1;
else if(((struct registro*)a)->hora > ((struct registro*)b)->hora)
return 1;
else
return 0;
}
int main()
{
FILE *ps, *cf;
int dia, mes, counter, i;
struct registro registros[100];
ps
= fopen("Diaconcitas.txt","a+"); if(ps == NULL) {
printf("No se puede abrir el archivo\n"); return 1;
}
cf
= fopen("citasp.txt","r"); if(cf == NULL) {
printf("No se puede abrir el archivo\n"); return 1;
}
printf("Introduce la fecha del dia que deseas ver el listado\n");
counter = 0;
while(fscanf(cf
,"%s con identificacion %d, tiene cita el dia %d-%d a las %f \n", registros
[counter
].
nombre, &(registros
[counter
].
id), &(registros
[counter
].
dia), &(registros
[counter
].
mes), &(registros
[counter
].
hora)) != EOF
&& counter
< 100) {
counter++;
}
qsort(registros
, counter
, sizeof(struct registro
), cmp
); for(i = 0; i < counter; i++) {
if(dia == registros[i].dia && mes == registros[i].mes)
printf("%s con identificacion %d, tiene cita el dia %d-%d a las %.2f \n", registros
[i
].
nombre, (registros
[i
].
id), (registros
[i
].
dia), (registros
[i
].
mes), (registros
[i
].
hora)); }
}