el problema es cunado quiero tomar esos archivos e imprimirlos en pantalla
no se si estoy tomando mal los datos del archivo o estoy ingresando mal los datos en el archivo, pero el tema es que me termina imprimiendo dos veces la ultima linea del archivo...
Bueno al final era un problema con como imprimía en pantalla lo que havia en el archivo de texto
Código:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
char *nm;
int dia;
int ms;
int aa;
char mes[11];
}Persona;
void entrada (Persona* p);
char* mes_asci (int n);
int main(int argc, char** argv)
{
FILE *pff;
char fn[] = "Personas.DAT";
char buf[121];
if ( (pff = fopen(fn,"a+t")) == NULL )
{
puts ("Error al abrir archivo");
exit (-1);
}
//while (!feof(pff))
while (fgets (buf,121,pff))
{
printf ("%s \n\n",buf);
}
Persona pt;
entrada (&pt);
fprintf(pff,"%s %d-%d-%d %s\n", pt.nm, pt.dia, pt.ms, pt.aa, pt.mes);
fclose(pff);
return 0;
}
void entrada (Persona * p)
{
char bf[80];
printf ("Escriba el nombre: ");
fgets (bf,80,stdin);
if (bf[strlen(bf) - 1] == '\n' )
bf[strlen(bf)] = '\0';
p->nm = (char*) malloc ((strlen (bf) + 1) * sizeof(char));
strcpy (p->nm, bf);
do
{
printf ("introduzca dia mes año (dd mm aaaa) : ");
fgets (bf, 80, stdin);
if (bf[strlen(bf) - 1] == '\n' )
bf[strlen(bf)] = '\0';
sscanf (bf,"%d %d %d%*c", &p->dia, &p->ms, &p->aa );
printf ("\n %s\n", mes_asci(p->ms));
} while ( ( mes_asci(p->ms) == "Mes eroneo") || (p->dia > 31 || p->dia < 1 ) );
strcpy(p->mes, mes_asci(p->ms));
}
char* mes_asci (int n)
{
static char *mes[12] = {
"Enero", "Febrero", "Marzo", "Abril",
"Mayo", "Junio", "Julio", "Agosto", "Septiembre",
"Octubre", "Noviembre", "Diciembre" };
if (n >= 1 && n <= 12)
return mes[n-1];
else
return "Mes eroneo";
}