Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: ReySolARG en Junio 04, 2011, 12:49:55 AM

Título: [SOLUCIONADO] Ayuda con Agenda en C
Publicado por: ReySolARG en Junio 04, 2011, 12:49:55 AM
Hola soy nuevo en este foro!!! Necesito si me pueden ayudar con esta agenda en C que ya me volvio totalmente loco!!! ja!!!
Hace casi todo bien pero una vez que yo ingrese los datos y le di guardar cuando elijo la opcion de ver contacto me aparece lo que yo ingrese pero si cierro el programa y lo abro no tengo nada!!!
Les Agradeceria mucho si em ayudan!!!! aca les dejo el codigo


////////////////////////////////////////agenda//////////////////////////////////////////////////

#include<string.h>
#include<stdio.h>
#include<conio.h>
#include<ctype.h>
#include<stdlib.h>
#include<DOS.H>
#include<time.h>

struct fechanac{
  int dia;
  int mes;
  int ano;
  } fn;

struct a{
  char nombre[10];
  char apellido[10];
  int edad;
  long int tel;
  long int dni;
  char correo[30];
  struct fechanac fn;
  } con[30];


int validarnomap(int);
int validarcorreo (char*);
void main()
{

//----------------------------VARIABLES----------------------------------------------
int op=0,x=0,s=0,o=0,y=0,j=0,p=0,i=0,lgo=0,cont=0,time_t,t;
int vf;
int vff=0,a4=0,a100=0,a400=0,d=0;
long int nro=0;
char string[30];
//-----------------------------ARCHIVO-----------------------------------------
FILE *v;
v=fopen("agendaCRIS.txt","a+");

//-----------------------------REPETICION DEL MENU---------------------------------
do
{
//---------------------------CARGA DE DATOS------------------------------------
x=0;
while (x<2)
{
fscanf (v,"%s",&con[x].nombre);
fscanf (v,"%s",&con[x].apellido);
fscanf (v,"%d",&con[x].edad);
fscanf (v,"%2d/%2d/%4d",&con[x].fn.dia,&con[x].fn.mes,&con[x].fn.ano);
fscanf (v,"%ld",&con[x].tel);
fscanf (v,"%ld",&con[x].dni);
fscanf (v,"%s",&con[x].correo);
x++;
}


//------------------------------MENU--------------------------------------------------



textbackground(RED);
textcolor(WHITE);
clrscr ();


  gotoxy(20,2) ;printf ("|||||||||||||||||||||||||||||||||\n");
  gotoxy(20,3) ;printf ("||           AGENDA            ||\n");
  gotoxy(20,4) ;printf ("|||||||||||||||||||||||||||||||||\n");
  gotoxy(20,5) ;printf ("|| 1_ Ingresar Contacto        ||\n");
  gotoxy(20,6) ;printf ("|| 2_ Ver un contacto          ||\n");
  gotoxy(20,7) ;printf ("|| 3_ Ver todos los contactos  ||\n");
  gotoxy(20,8) ;printf ("|| 4_ Editar Contacto          ||\n");
  gotoxy(20,9) ;printf ("|| 5_ Guardar                  ||\n");
  gotoxy(20,10);printf ("|| 6_ Salir                    ||\n");
  gotoxy(20,11);printf ("|||||||||||||||||||||||||||||||||\n");
printf ("\n");
  gotoxy(20,13);printf ("|||||||||||||||||||||||||||||||||\n");
  gotoxy(20,14);printf ("|| INGRESE OPCION:             ||\n");
  gotoxy(20,15);printf ("|||||||||||||||||||||||||||||||||\n");
  gotoxy(20,20) ;printf("Copyrights@ by CRISTIAN ALLEMAND\n");
  gotoxy(29,21) ;printf("Diciembre 2010\n");
  gotoxy(39,14);scanf ("%d",& op);
printf ("\n\n");


//--------------------------OPERACIONES---------------------------------------------
clrscr();
switch (op)
{
case 1:
  x=0;
  while (x<30)
   {

if(con[x].nombre[x] =='\x0')
  {
printf ("> Contacto Numero %d\n",(x+1));
printf ("> Ingrese Nombre(sin espacios previos):");
scanf ("%s",con[x].nombre);

o=validarnomap(x);
if(o==0)
  {
  printf("                                BIEN ESCRITO\n");
  }
  else
{
printf("                            MAL ESCRIT\n");

  getch();
  clrscr();
  gotoxy(20,4); printf ("|||||||||||||||||||||||||||||||||||||||||");
  gotoxy(20,5); printf ("|| 1_  <+> Volver al menu Principal    ||\n");
  gotoxy(20,6); printf ("|| 2_  <+> Salir                       ||\n");
  gotoxy(20,7); printf ("|||||||||||||||||||||||||||||||||||||||||\n");
  gotoxy(20,8); printf ("|||||||||||||||||||||||||||||||||||||||||\n");
  gotoxy(20,9); printf ("|| INGRESE OPCION:                     ||\n");
  gotoxy(20,10);printf ("|||||||||||||||||||||||||||||||||||||||||\n");
  gotoxy(39,9); scanf("%d",&s);
  if(s==1)
{
x=33;x++;
break;
}
else
   {
   if(s==2)
{
  exit(0);
}

   }
break;
}

//------------------------------
do{
      printf("\nFecha de Nac:\n");
      fflush(stdin);
      printf("Dia: ");
      scanf("%d",&con[x].fn.dia);
      printf("Mes: ");
      scanf("%d",&con[x].fn.mes);
      printf("Año: ");
      scanf("%d",&con[x].fn.ano);
      p=con[x].fn.mes%2;
      if((con[x].fn.mes>0)&&(con[x].fn.mes<13))
{
if(con[x].fn.mes==2)
  {
a4=con[x].fn.ano%4;
a100=con[x].fn.ano%100;
a400=con[x].fn.ano%400;
if(a4==0)
  {
    if(a100==0)
      {
if(a400==0)
  {
d=30;
  }
  else
    {
d=29;
    }
      }
      else
{
d=30;
}
  }
  else
    {
    d=29;
    }
}
  else
    {
if(con[x].fn.mes<8)
  {
    if(p==0)
      {
d=31;
      }
      else
{
d=32;
}
  }
  else
    {
      if(p==0)
{
d=32;
}
else
  {
d=31;
  }
    }
    }
    if(con[x].fn.dia<d)
      {
vf=1;
      }
      else
{
printf("\nFecha no valida.....!!!");
}
   }
   else
{
printf("\nFecha no valida.....!!!");
}
  }while(vf!=1);
      do
{
printf ("> Ingrese numero de telefono: ");
scanf ("%ld",&con[x].tel);
ltoa(con[x].tel,string,10);
nro=validarnro(string);
if(nro!=0)
  {
   printf("                         ERROR....!!!\n");
   vff=1;
  }
  else
    {
    vff=0;
    }
}while(vff!=1);
printf ("> Ingrese DNI: ");
scanf ("%d",&con[x].dni);

o=con[x].dni;
if(o>99999999)
  {
  printf("ERROR !! dni no valido\n");
  }
printf ("> Ingrese correo electronico: ");
scanf ("%s",con[x].correo);
nro=validarcorreo(con[x].correo);
if(nro==0)
  {
  printf("ERROR falta el '@'\n");
  }
  else
    {
    if(nro==1)
      {
      printf("ERROR falta el domino ej:'.com','.com.ar','.net',etc\n");
      }
    }



getch();
clrscr();
   gotoxy(20,4); printf ("|||||||||||||||||||||||||||||||||||||||||");
   gotoxy(20,5); printf ("|| 1_  <+> Volver al menu principal    ||\n");
   gotoxy(20,6); printf ("|| 2_  <+> Salir                       ||\n");
   gotoxy(20,7); printf ("|||||||||||||||||||||||||||||||||||||||||\n");
   gotoxy(20,8); printf ("|||||||||||||||||||||||||||||||||||||||||\n");
   gotoxy(20,9); printf ("|| INGRESE OPCION:                     ||\n");
   gotoxy(20,10);printf ("|||||||||||||||||||||||||||||||||||||||||\n");
   gotoxy(39,9); scanf("%d",&s);

if(s==2)
{
x=33;
}
      }
x++;
   }
   break;



   case 2:
   {
x=0;
printf ("Ingrse numero de contacto que desea ver: ");
scanf  ("%d",&x);
x--;
printf ("\n> Contacto Nun %d\n",(x+1));
printf ("> Nombre: %s\n",con[x].nombre);
printf ("> Apellido: %s\n",con[x].apellido);
printf ("> Edad(A¥os): %d\n",con[x].edad);
printf ("> Fecha de nacimiento: %2d/%2d/%4d\n",con[x].fn.dia,con[x].fn.mes,con[x].fn.ano);
printf ("> Numero de telefono: %d\n",con[x].tel);
printf ("> DNI: %d\n",con[x].dni);
printf ("> Correo electronico: %s\n",con[x].correo);
   }
   getch();
   break;

   case 3:
   {
    x=0;
    while (con[x].nombre[x] !='\x0')
     {
printf ("\n> Contacto Nun %d\n",(x+1));
printf ("> Nombre: %s\n",con[x].nombre);
printf ("> Apellido: %s\n",con[x].apellido);
printf ("> Edad(A¥os): %d\n",con[x].edad);
printf ("> Fecha de nacimiento: %2d/%2d/%4d\n",con[x].fn.dia,con[x].fn.mes,con[x].fn.ano);
printf ("> Numero de telefono: %d\n",con[x].tel);
printf ("> DNI: %d\n",con[x].dni);
printf ("> Correo electronico: %s\n",con[x].correo);
x++;
     }
   }
   getch();
   break;

   case 4:
   {
    x=0;
    printf ("TENER EN CUENTA QUE LOS DATOS VIEJOS SE PERDERAN!!");
    printf ("Ingrese numero de contacto que desea re ingresar:  ");
    scanf ("%d",&x);
    x--;
       printf ("> Ingrese Nombre(sin espacios previos):");
scanf ("%s",con[x].nombre);

o=validarnomap(x);
if(o==0)
  {
  printf("                                BIEN ESCRITO\n");
  }
  else
{
printf("                            MAL ESCRIT\n");

  getch();
  clrscr();
  gotoxy(20,4); printf ("|||||||||||||||||||||||||||||||||||||||||");
  gotoxy(20,5); printf ("|| 1_  <+> Volver al menu Principal    ||\n");
  gotoxy(20,6); printf ("|| 2_  <+> Salir                       ||\n");
  gotoxy(20,7); printf ("|||||||||||||||||||||||||||||||||||||||||\n");
  gotoxy(20,8); printf ("|||||||||||||||||||||||||||||||||||||||||\n");
  gotoxy(20,9); printf ("|| INGRESE OPCION:                     ||\n");
  gotoxy(20,10);printf ("|||||||||||||||||||||||||||||||||||||||||\n");
  gotoxy(39,9); scanf("%d",&s);
  if(s==1)
{
x=33;x++;
break;
}
else
   {
   if(s==2)
{
  exit(0);
}

   }
break;
}

//------------------------------
do{
      printf("\nFecha de Nac:\n");
      fflush(stdin);
      printf("Dia: ");
      scanf("%d",&con[x].fn.dia);
      printf("Mes: ");
      scanf("%d",&con[x].fn.mes);
      printf("Año: ");
      scanf("%d",&con[x].fn.ano);
      p=con[x].fn.mes%2;
      if((con[x].fn.mes>0)&&(con[x].fn.mes<13))
{
if(con[x].fn.mes==2)
  {
a4=con[x].fn.ano%4;
a100=con[x].fn.ano%100;
a400=con[x].fn.ano%400;
if(a4==0)
  {
    if(a100==0)
      {
if(a400==0)
  {
d=30;
  }
  else
    {
d=29;
    }
      }
      else
{
d=30;
}
  }
  else
    {
    d=29;
    }
}
  else
    {
if(con[x].fn.mes<8)
  {
    if(p==0)
      {
d=31;
      }
      else
{
d=32;
}
  }
  else
    {
      if(p==0)
{
d=32;
}
else
  {
d=31;
  }
    }
    }
    if(con[x].fn.dia<d)
      {
vf=1;
      }
      else
{
printf("\nFecha no valida.....!!!");
}
   }
   else
{
printf("\nFecha no valida.....!!!");
}
  }while(vf!=1);
      do
{
printf ("> Ingrese numero de telefono: ");
scanf ("%ld",&con[x].tel);
ltoa(con[x].tel,string,10);
nro=validarnro(string);
if(nro!=0)
  {
   printf("                         ERROR....!!!\n");
   vff=1;
  }
  else
    {
    vff=0;
    }
}while(vff!=1);
printf ("> Ingrese DNI: ");
scanf ("%d",&con[x].dni);

o=con[x].dni;
if(o>99999999)
  {
  printf("ERROR !! dni no valido\n");
  }
printf ("> Ingrese correo electronico: ");
scanf ("%s",con[x].correo);
nro=validarcorreo(con[x].correo);
if(nro==0)
  {
  printf("ERROR falta el '@'\n");
  }
  else
    {
    if(nro==1)
      {
      printf("ERROR falta el domino ej:'.com','.com.ar','.net',etc\n");
      }
    }



getch();
clrscr();
   gotoxy(20,4); printf ("|||||||||||||||||||||||||||||||||||||||||");
   gotoxy(20,5); printf ("|| 1_  <+> Volver al menu principal    ||\n");
   gotoxy(20,6); printf ("|| 2_  <+> Salir                       ||\n");
   gotoxy(20,7); printf ("|||||||||||||||||||||||||||||||||||||||||\n");
   gotoxy(20,8); printf ("|||||||||||||||||||||||||||||||||||||||||\n");
   gotoxy(20,9); printf ("|| INGRESE OPCION:                     ||\n");
   gotoxy(20,10);printf ("|||||||||||||||||||||||||||||||||||||||||\n");
   gotoxy(39,9); scanf("%d",&s);
if(s==1)
   {
   x=33;
   x++;
   }
   if(s==2)
     {
     exit(0);
     }


   }


   getch();
   break;

   case 5:
   {
    x=0;
    while (con[x].nombre[x] !='\x0')
     {
fprintf (v,"%s\n",con[x].nombre);
fprintf (v,"%s\n",con[x].apellido);
fprintf (v,"%2d/%2d/%4d\n",con[x].fn.dia,con[x].fn.mes,con[x].fn.ano);
fprintf (v,"%d\n",con[x].tel);
fprintf (v,"%d\n",con[x].dni);
fprintf (v,"%s\n",con[x].correo);
x++;
     }
   }

   break;
}
//-----------------------------REPETICION DEL MENU---------------------------------
}
while (op !=6);
//----------------------------------FIN----------------------------------------
fclose(v);
}
void espera(long sec)
{

    long inicio, actual;
    time(&inicio) ;
    time(&actual) ;

    while((actual-inicio)<sec)
    {
time(&actual) ;
    }

}



int validarnomap (x)
  {


   int lgo=0,i=0,cont=0, o=0;
   lgo=strlen(con[x].nombre);

   while(i<lgo)
     {
     if(isalpha(con[x].nombre[i]))
       {
cont++;
       }
       i++;
     }

     if(lgo>0 && cont==lgo)
       {
o=0;
return o;   //esta bien escrito
       }
       else
  {
   o=1;
   return o;   //esta mal escrito
  }
}
int validarnro (char* string)
  {
  //printf("Evaluando el contacto %d", x);

   int lgo=0,i=0,cont=0, nro=0;
   lgo=strlen(string);

   while(i<lgo)
     {
     if(isdigit(string[i]))
       {
cont++;
       }
       i++;
     }

     if(lgo>0 && cont==lgo)
       {
nro=0;
return nro;   //esta bien escrito
       }
       else
  {
   nro=1;
   return nro;   //esta mal escrito
  }
}


int validarcorreo(char* correo)
{

  int i, j, flag,x,nro=6;



  j = 0;
  flag = 0; /* <- Buscar la '@' */
  for(i = 0; i < strlen(correo); i++)
  {
    if (flag == 1)
    {
      if (correo[i] == '.')
      {
j = i+1;
break;
      }
    }
    else if (flag == 0)
      if (correo[i] == '@')
flag++; /* <- Buscar el '.' */
  }


    if (flag == 0)
    {
      nro=0;
      return nro; //("No Valido. Falta la @\n");
    }
    else
      {
      nro=1;
      return nro; //("No Valido. Falta el dominio\n");
      }


}


Título: Re:Ayuda con Agenda en C
Publicado por: ReySolARG en Junio 04, 2011, 01:08:30 AM
perdon hay printf que no me los ha tomado al pasarlos aca!!! saludos
Título: Re:Ayuda con Agenda en C
Publicado por: Xt3mP en Junio 04, 2011, 01:23:10 AM
Te edite el post, para la próxima te pido que utilizes los tags [ c o d e = lenguaje] y [ / c o d e ] para enfrascar código (sin espacios)


[code=c]CODIGO[ /code] <- Sin el espacio entre el [ y la /.


Ten por seguro que muy pronto resolveran tu duda.
Título: Re:Ayuda con Agenda en C
Publicado por: ReySolARG en Junio 04, 2011, 04:43:15 PM
Ok gracias amigo y disculpa!!!
Título: Re:Ayuda con Agenda en C
Publicado por: S[e]C en Junio 04, 2011, 04:56:08 PM
cambia el modo de apertura del archivo a "r+" y cuentame :)
Título: Re:Ayuda con Agenda en C
Publicado por: ReySolARG en Junio 04, 2011, 06:07:58 PM
ok gracias!! ahi lo estoy probando!!! pero ahora me aparecrieron errores de programacion ja!! la compilacion sale bien oeri teno un problemita que me esta mopstrando cualquier dato cuando muestro el contacto!!!
Título: Re:Ayuda con Agenda en C
Publicado por: S[e]C en Junio 04, 2011, 06:12:38 PM
Lo que te dije no era la solución jeje, era para que vieras tu error, mira "a+" abre el archivo para lectura o escritura y sitúa el puntero al final del archivo, es conveniente abrirlo asi para escribir en el archivo =) , "r+" abre el archivo para lectura y escritura y sitúa el puntero al principio del archivo es decir es conveniente para leer ... osea prueba a abrir y cerrar dos veces el archivo usando esos dos modos y cuando corresponda y no deberías tener ningún problema.
Título: Re:Ayuda con Agenda en C
Publicado por: ReySolARG en Junio 04, 2011, 06:16:06 PM
ya lo hice!! probe con (a+) y (r+) pero cuando cierro y abro el programa no me levanta el archivo
Título: Re:Ayuda con Agenda en C
Publicado por: S[e]C en Junio 04, 2011, 06:27:02 PM
mmm no es que pruebes con uno o con otro, lo correcto no es que abras una sola vez el archivo de una sola forma y asi operes con el ...

Mira para cargar abre el archivo en modo "r+" y luego de cargado lo cierras (fclose), lo otro ... no abras el archivo denuevo (fopen) hasta que en el menu se indique la opcion de guardar, ahi lo abres en modo "a+" y lo cierras luego del guardado.

haz eso y cuentame, porque mira, te explico el problema que habia primero...

ARCHIVO VACIO

tu abrias en a+ osea el cursor esta situado al final del archivo, entonces escribias datos y guardabas quedaba algo asi en el archivo:

palabra1 palabra2
palabra3 palabra4


entonces cuando lo abrias denuevo se abria en modo a+ nuevamente con el puntero al final del archivo, osea:

palabra1 palabra2
palabra3 palabra4 X    (donde X es el puntero)


osea si haces un fscanf(archivo ... no leias nada porque desde el final en adelante solo esta EOF (end of file), pero si para leer (cargar) abres en r+ el puntero estara al principio, es decir:

X palabra1 palabra2
palabra3 palabra4 


por lo que fscanf(archivo si lee el contenido total del archivo...

espero que se halla entendido :)
Título: Re:Ayuda con Agenda en C
Publicado por: ReySolARG en Junio 04, 2011, 06:44:47 PM
Excelente explicacion y muchas gracias por tu tiempo!!! pero me marie mas!!! jajajaja!!!
que debo modificarle o agragarle al codigo que tengo?
Título: Re:Ayuda con Agenda en C
Publicado por: S[e]C en Junio 04, 2011, 06:46:54 PM
ahora voy acompañar a mi madre al super xd, apenas regrese te posteo tu código modificado, mientras intenta arreglarlo tú, relee mi ultimo post, lo que dije al principio, eso es lo que tienes que hacer jeje.

SaludOS.
Título: Re:Ayuda con Agenda en C
Publicado por: ReySolARG en Junio 04, 2011, 07:21:22 PM
jajjaa ok dale gracias!!!
Título: Re:Ayuda con Agenda en C
Publicado por: Alejandro_N12 en Junio 04, 2011, 07:55:07 PM
En C, los ficheros admiten seis modos en cuanto a la dirección del flujo de datos:

r: sólo lectura. El fichero debe existir.
w: se abre para escritura, se crea un fichero nuevo o se sobrescribe si ya existe.
a: añadir, se abre para escritura, el cursor se situa al final del fichero. Si el fichero no existe, se crea.

r+: lectura y escritura. El fichero debe existir.
w+: lectura y escritura, se crea un fichero nuevo o se sobrescribe si ya existe.
a+: añadir, lectura y escritura, el cursor se situa al final del fichero. Si el fichero no existe, se crea.

En cuanto a los valores permitidos para los bytes, se puede añadir otro carácter a la cadena de modo:
t: modo texto. Normalmente es el modo por defecto. Se suele omitir.
b: modo binario.



Agregado: Si abrís el fichero en modo a+, antes de leer datos del archivo tenes que usar la función rewind(); que vuelve el puntero al principio del archivo
void rewind(FILE *fichero)
Esto lo haces porque si no al archivo lo abrís al final y es obvio que no va a leer nada, después usas la función while(!feof(fichero)) , que lo que hace es leer el fichero hasta que llegue al final y ahí vas pasando los datos a memoria o solo pasas el dato que te sirve
Título: Re:Ayuda con Agenda en C
Publicado por: ReySolARG en Junio 04, 2011, 08:13:09 PM
ok me podrias dar un ejmplo del odigo de coo quedaria?
Título: Re:Ayuda con Agenda en C
Publicado por: Alejandro_N12 en Junio 04, 2011, 08:18:02 PM
Antes de la carga de datos pone

rewind(v);
while(!feof(v))
{
                        fscanf (v,"%s",&con[x].nombre);
fscanf (v,"%s",&con[x].apellido);
fscanf (v,"%d",&con[x].edad);
fscanf (v,"%2d/%2d/%4d",&con[x].fn.dia,&con[x].fn.mes,&con[x].fn.ano);
fscanf (v,"%ld",&con[x].tel);
fscanf (v,"%ld",&con[x].dni);
fscanf (v,"%s",&con[x].correo);
}



Igual si no me equivoco podes leer toda la estructura en vez de ir de a uno, pero no estoy seguro
Título: Re:Ayuda con Agenda en C
Publicado por: S[e]C en Junio 04, 2011, 08:20:27 PM
Prueba si te anda bien, así, es lo que yo te decía: ////////////////////////////////////////agenda//////////////////////////////////////////////////

#include<string.h>
#include<stdio.h>
#include<conio.h>
#include<ctype.h>
#include<stdlib.h>
#include<DOS.H>
#include<time.h>

struct fechanac{
  int dia;
  int mes;
  int ano;
  } fn;

struct a{
  char nombre[10];
  char apellido[10];
  int edad;
  long int tel;
  long int dni;
  char correo[30];
  struct fechanac fn;
  } con[30];


int validarnomap(int);
int validarcorreo (char*);
void main()
{

//----------------------------VARIABLES----------------------------------------------
int op=0,x=0,s=0,o=0,y=0,j=0,p=0,i=0,lgo=0,cont=0,time_t,t;
int vf;
int vff=0,a4=0,a100=0,a400=0,d=0;
long int nro=0;
char string[30];
//-----------------------------ARCHIVO-----------------------------------------
FILE *v;
v=fopen("agendaCRIS.txt","r+");

//-----------------------------REPETICION DEL MENU---------------------------------
do
{
//---------------------------CARGA DE DATOS------------------------------------
x=0;
while (x<2)
{
fscanf (v,"%s",&con[x].nombre);
fscanf (v,"%s",&con[x].apellido);
fscanf (v,"%d",&con[x].edad);
fscanf (v,"%2d/%2d/%4d",&con[x].fn.dia,&con[x].fn.mes,&con[x].fn.ano);
fscanf (v,"%ld",&con[x].tel);
fscanf (v,"%ld",&con[x].dni);
fscanf (v,"%s",&con[x].correo);
x++;
}
fclose(v)

//------------------------------MENU--------------------------------------------------



textbackground(RED);
textcolor(WHITE);
clrscr ();


  gotoxy(20,2) ;printf ("|||||||||||||||||||||||||||||||||\n");
  gotoxy(20,3) ;printf ("||           AGENDA            ||\n");
  gotoxy(20,4) ;printf ("|||||||||||||||||||||||||||||||||\n");
  gotoxy(20,5) ;printf ("|| 1_ Ingresar Contacto        ||\n");
  gotoxy(20,6) ;printf ("|| 2_ Ver un contacto          ||\n");
  gotoxy(20,7) ;printf ("|| 3_ Ver todos los contactos  ||\n");
  gotoxy(20,8) ;printf ("|| 4_ Editar Contacto          ||\n");
  gotoxy(20,9) ;printf ("|| 5_ Guardar                  ||\n");
  gotoxy(20,10);printf ("|| 6_ Salir                    ||\n");
  gotoxy(20,11);printf ("|||||||||||||||||||||||||||||||||\n");
printf ("\n");
  gotoxy(20,13);printf ("|||||||||||||||||||||||||||||||||\n");
  gotoxy(20,14);printf ("|| INGRESE OPCION:             ||\n");
  gotoxy(20,15);printf ("|||||||||||||||||||||||||||||||||\n");
  gotoxy(20,20) ;printf("Copyrights@ by CRISTIAN ALLEMAND\n");
  gotoxy(29,21) ;printf("Diciembre 2010\n");
  gotoxy(39,14);scanf ("%d",& op);
printf ("\n\n");


//--------------------------OPERACIONES---------------------------------------------
clrscr();
switch (op)
{
case 1:
  x=0;
  while (x<30)
   {

if(con[x].nombre[x] =='\x0')
  {
printf ("> Contacto Numero %d\n",(x+1));
printf ("> Ingrese Nombre(sin espacios previos):");
scanf ("%s",con[x].nombre);

o=validarnomap(x);
if(o==0)
  {
  printf("                                BIEN ESCRITO\n");
  }
  else
{
printf("                            MAL ESCRIT\n");

  getch();
  clrscr();
  gotoxy(20,4); printf ("|||||||||||||||||||||||||||||||||||||||||");
  gotoxy(20,5); printf ("|| 1_  <+> Volver al menu Principal    ||\n");
  gotoxy(20,6); printf ("|| 2_  <+> Salir                       ||\n");
  gotoxy(20,7); printf ("|||||||||||||||||||||||||||||||||||||||||\n");
  gotoxy(20,8); printf ("|||||||||||||||||||||||||||||||||||||||||\n");
  gotoxy(20,9); printf ("|| INGRESE OPCION:                     ||\n");
  gotoxy(20,10);printf ("|||||||||||||||||||||||||||||||||||||||||\n");
  gotoxy(39,9); scanf("%d",&s);
  if(s==1)
{
x=33;x++;
break;
}
else
   {
   if(s==2)
{
  exit(0);
}

   }
break;
}

//------------------------------
do{
      printf("\nFecha de Nac:\n");
      fflush(stdin);
      printf("Dia: ");
      scanf("%d",&con[x].fn.dia);
      printf("Mes: ");
      scanf("%d",&con[x].fn.mes);
      printf("Año: ");
      scanf("%d",&con[x].fn.ano);
      p=con[x].fn.mes%2;
      if((con[x].fn.mes>0)&&(con[x].fn.mes<13))
{
if(con[x].fn.mes==2)
  {
a4=con[x].fn.ano%4;
a100=con[x].fn.ano%100;
a400=con[x].fn.ano%400;
if(a4==0)
  {
    if(a100==0)
      {
if(a400==0)
  {
d=30;
  }
  else
    {
d=29;
    }
      }
      else
{
d=30;
}
  }
  else
    {
    d=29;
    }
}
  else
    {
if(con[x].fn.mes<8)
  {
    if(p==0)
      {
d=31;
      }
      else
{
d=32;
}
  }
  else
    {
      if(p==0)
{
d=32;
}
else
  {
d=31;
  }
    }
    }
    if(con[x].fn.dia<d)
      {
vf=1;
      }
      else
{
printf("\nFecha no valida.....!!!");
}
   }
   else
{
printf("\nFecha no valida.....!!!");
}
  }while(vf!=1);
      do
{
printf ("> Ingrese numero de telefono: ");
scanf ("%ld",&con[x].tel);
ltoa(con[x].tel,string,10);
nro=validarnro(string);
if(nro!=0)
  {
   printf("                         ERROR....!!!\n");
   vff=1;
  }
  else
    {
    vff=0;
    }
}while(vff!=1);
printf ("> Ingrese DNI: ");
scanf ("%d",&con[x].dni);

o=con[x].dni;
if(o>99999999)
  {
  printf("ERROR !! dni no valido\n");
  }
printf ("> Ingrese correo electronico: ");
scanf ("%s",con[x].correo);
nro=validarcorreo(con[x].correo);
if(nro==0)
  {
  printf("ERROR falta el '@'\n");
  }
  else
    {
    if(nro==1)
      {
      printf("ERROR falta el domino ej:'.com','.com.ar','.net',etc\n");
      }
    }



getch();
clrscr();
   gotoxy(20,4); printf ("|||||||||||||||||||||||||||||||||||||||||");
   gotoxy(20,5); printf ("|| 1_  <+> Volver al menu principal    ||\n");
   gotoxy(20,6); printf ("|| 2_  <+> Salir                       ||\n");
   gotoxy(20,7); printf ("|||||||||||||||||||||||||||||||||||||||||\n");
   gotoxy(20,8); printf ("|||||||||||||||||||||||||||||||||||||||||\n");
   gotoxy(20,9); printf ("|| INGRESE OPCION:                     ||\n");
   gotoxy(20,10);printf ("|||||||||||||||||||||||||||||||||||||||||\n");
   gotoxy(39,9); scanf("%d",&s);

if(s==2)
{
x=33;
}
      }
x++;
   }
   break;



   case 2:
   {
x=0;
printf ("Ingrse numero de contacto que desea ver: ");
scanf  ("%d",&x);
x--;
printf ("\n> Contacto Nun %d\n",(x+1));
printf ("> Nombre: %s\n",con[x].nombre);
printf ("> Apellido: %s\n",con[x].apellido);
printf ("> Edad(A¥os): %d\n",con[x].edad);
printf ("> Fecha de nacimiento: %2d/%2d/%4d\n",con[x].fn.dia,con[x].fn.mes,con[x].fn.ano);
printf ("> Numero de telefono: %d\n",con[x].tel);
printf ("> DNI: %d\n",con[x].dni);
printf ("> Correo electronico: %s\n",con[x].correo);
   }
   getch();
   break;

   case 3:
   {
    x=0;
    while (con[x].nombre[x] !='\x0')
     {
printf ("\n> Contacto Nun %d\n",(x+1));
printf ("> Nombre: %s\n",con[x].nombre);
printf ("> Apellido: %s\n",con[x].apellido);
printf ("> Edad(A¥os): %d\n",con[x].edad);
printf ("> Fecha de nacimiento: %2d/%2d/%4d\n",con[x].fn.dia,con[x].fn.mes,con[x].fn.ano);
printf ("> Numero de telefono: %d\n",con[x].tel);
printf ("> DNI: %d\n",con[x].dni);
printf ("> Correo electronico: %s\n",con[x].correo);
x++;
     }
   }
   getch();
   break;

   case 4:
   {
    x=0;
    printf ("TENER EN CUENTA QUE LOS DATOS VIEJOS SE PERDERAN!!");
    printf ("Ingrese numero de contacto que desea re ingresar:  ");
    scanf ("%d",&x);
    x--;
       printf ("> Ingrese Nombre(sin espacios previos):");
scanf ("%s",con[x].nombre);

o=validarnomap(x);
if(o==0)
  {
  printf("                                BIEN ESCRITO\n");
  }
  else
{
printf("                            MAL ESCRIT\n");

  getch();
  clrscr();
  gotoxy(20,4); printf ("|||||||||||||||||||||||||||||||||||||||||");
  gotoxy(20,5); printf ("|| 1_  <+> Volver al menu Principal    ||\n");
  gotoxy(20,6); printf ("|| 2_  <+> Salir                       ||\n");
  gotoxy(20,7); printf ("|||||||||||||||||||||||||||||||||||||||||\n");
  gotoxy(20,8); printf ("|||||||||||||||||||||||||||||||||||||||||\n");
  gotoxy(20,9); printf ("|| INGRESE OPCION:                     ||\n");
  gotoxy(20,10);printf ("|||||||||||||||||||||||||||||||||||||||||\n");
  gotoxy(39,9); scanf("%d",&s);
  if(s==1)
{
x=33;x++;
break;
}
else
   {
   if(s==2)
{
  exit(0);
}

   }
break;
}

//------------------------------
do{
      printf("\nFecha de Nac:\n");
      fflush(stdin);
      printf("Dia: ");
      scanf("%d",&con[x].fn.dia);
      printf("Mes: ");
      scanf("%d",&con[x].fn.mes);
      printf("Año: ");
      scanf("%d",&con[x].fn.ano);
      p=con[x].fn.mes%2;
      if((con[x].fn.mes>0)&&(con[x].fn.mes<13))
{
if(con[x].fn.mes==2)
  {
a4=con[x].fn.ano%4;
a100=con[x].fn.ano%100;
a400=con[x].fn.ano%400;
if(a4==0)
  {
    if(a100==0)
      {
if(a400==0)
  {
d=30;
  }
  else
    {
d=29;
    }
      }
      else
{
d=30;
}
  }
  else
    {
    d=29;
    }
}
  else
    {
if(con[x].fn.mes<8)
  {
    if(p==0)
      {
d=31;
      }
      else
{
d=32;
}
  }
  else
    {
      if(p==0)
{
d=32;
}
else
  {
d=31;
  }
    }
    }
    if(con[x].fn.dia<d)
      {
vf=1;
      }
      else
{
printf("\nFecha no valida.....!!!");
}
   }
   else
{
printf("\nFecha no valida.....!!!");
}
  }while(vf!=1);
      do
{
printf ("> Ingrese numero de telefono: ");
scanf ("%ld",&con[x].tel);
ltoa(con[x].tel,string,10);
nro=validarnro(string);
if(nro!=0)
  {
   printf("                         ERROR....!!!\n");
   vff=1;
  }
  else
    {
    vff=0;
    }
}while(vff!=1);
printf ("> Ingrese DNI: ");
scanf ("%d",&con[x].dni);

o=con[x].dni;
if(o>99999999)
  {
  printf("ERROR !! dni no valido\n");
  }
printf ("> Ingrese correo electronico: ");
scanf ("%s",con[x].correo);
nro=validarcorreo(con[x].correo);
if(nro==0)
  {
  printf("ERROR falta el '@'\n");
  }
  else
    {
    if(nro==1)
      {
      printf("ERROR falta el domino ej:'.com','.com.ar','.net',etc\n");
      }
    }



getch();
clrscr();
   gotoxy(20,4); printf ("|||||||||||||||||||||||||||||||||||||||||");
   gotoxy(20,5); printf ("|| 1_  <+> Volver al menu principal    ||\n");
   gotoxy(20,6); printf ("|| 2_  <+> Salir                       ||\n");
   gotoxy(20,7); printf ("|||||||||||||||||||||||||||||||||||||||||\n");
   gotoxy(20,8); printf ("|||||||||||||||||||||||||||||||||||||||||\n");
   gotoxy(20,9); printf ("|| INGRESE OPCION:                     ||\n");
   gotoxy(20,10);printf ("|||||||||||||||||||||||||||||||||||||||||\n");
   gotoxy(39,9); scanf("%d",&s);
if(s==1)
   {
   x=33;
   x++;
   }
   if(s==2)
     {
     exit(0);
     }


   }


   getch();
   break;

   case 5:
   {
   v=fopen("agendaCRIS.txt","a+");
    x=0;
    while (con[x].nombre[x] !='\x0')
     {
fprintf (v,"%s\n",con[x].nombre);
fprintf (v,"%s\n",con[x].apellido);
fprintf (v,"%2d/%2d/%4d\n",con[x].fn.dia,con[x].fn.mes,con[x].fn.ano);
fprintf (v,"%d\n",con[x].tel);
fprintf (v,"%d\n",con[x].dni);
fprintf (v,"%s\n",con[x].correo);
x++;
     }
    fclose(v);
   }

   break;
}
//-----------------------------REPETICION DEL MENU---------------------------------
}
while (op !=6);
//----------------------------------FIN----------------------------------------
fclose(v);
}
void espera(long sec)
{

    long inicio, actual;
    time(&inicio) ;
    time(&actual) ;

    while((actual-inicio)<sec)
    {
time(&actual) ;
    }

}



int validarnomap (x)
  {


   int lgo=0,i=0,cont=0, o=0;
   lgo=strlen(con[x].nombre);

   while(i<lgo)
     {
     if(isalpha(con[x].nombre[i]))
       {
cont++;
       }
       i++;
     }

     if(lgo>0 && cont==lgo)
       {
o=0;
return o;   //esta bien escrito
       }
       else
  {
   o=1;
   return o;   //esta mal escrito
  }
}
int validarnro (char* string)
  {
  //printf("Evaluando el contacto %d", x);

   int lgo=0,i=0,cont=0, nro=0;
   lgo=strlen(string);

   while(i<lgo)
     {
     if(isdigit(string[i]))
       {
cont++;
       }
       i++;
     }

     if(lgo>0 && cont==lgo)
       {
nro=0;
return nro;   //esta bien escrito
       }
       else
  {
   nro=1;
   return nro;   //esta mal escrito
  }
}


int validarcorreo(char* correo)
{

  int i, j, flag,x,nro=6;



  j = 0;
  flag = 0; /* <- Buscar la '@' */
  for(i = 0; i < strlen(correo); i++)
  {
    if (flag == 1)
    {
      if (correo[i] == '.')
      {
j = i+1;
break;
      }
    }
    else if (flag == 0)
      if (correo[i] == '@')
flag++; /* <- Buscar el '.' */
  }


    if (flag == 0)
    {
      nro=0;
      return nro; //("No Valido. Falta la @\n");
    }
    else
      {
      nro=1;
      return nro; //("No Valido. Falta el dominio\n");
      }
}


yo no puedo checar si lo que modifiqué esta 100% bien porque gotoxy me hincha los huevos xD!, pero checalo y cuentame si anda bien =) .

PD: lo que dice Alejandro_N12 es correcto tambien, y lo de leer todo de una tambien :P .

Saludos
Título: Re:Ayuda con Agenda en C
Publicado por: ReySolARG en Junio 04, 2011, 09:29:26 PM
sec, con el codigo que me passate sigo teniendo casi el mismo ptoblems!!! cierro el programa y cuando lo vuelvo a ejecutar y pdo que me muestre los contactos que tengo (op3) solo me muestra correctamente el nombre y el mail!! pero fecha, telefono y dni nop!!!
Título: Re:Ayuda con Agenda en C
Publicado por: Gh0st.C en Junio 04, 2011, 10:07:06 PM
Algún mod. global que edite los mensajes de ReySolARG que esta meta hacer doble post.
Título: Re:Ayuda con Agenda en C
Publicado por: ANTRAX en Junio 04, 2011, 10:09:52 PM
Ahi borre los doble post
@ReySolARG, intenta poner todo en un solo posteo
Título: Re:Ayuda con Agenda en C
Publicado por: ReySolARG en Junio 04, 2011, 10:19:14 PM
Disculpen no se enojen!! no fue mi intencion!! este mensaje tambien es doble post?
Título: Re:Ayuda con Agenda en C
Publicado por: ANTRAX en Junio 04, 2011, 10:24:17 PM
doble post es cuando pones dos seguido uno abajo del otro
Si queres añadir algo, apreta el boton modificar y lo agregas en uno mismo
Título: Re:Ayuda con Agenda en C
Publicado por: ReySolARG en Junio 04, 2011, 10:27:01 PM
ok gracias!!
Título: Re:Ayuda con Agenda en C
Publicado por: Alejandro_N12 en Junio 04, 2011, 10:57:11 PM
Empeza a separar las cosas en funciones

void  leerArchivo ()
{
x=0;
rewind(v);
while(!feof(v))
{
                        fscanf (v,"%s",&con[x].nombre);
fscanf (v,"%s",&con[x].apellido);
fscanf (v,"%d",&con[x].edad);
fscanf (v,"%2d/%2d/%4d",&con[x].fn.dia,&con[x].fn.mes,&con[x].fn.ano);
fscanf (v,"%ld",&con[x].tel);
fscanf (v,"%ld",&con[x].dni);
fscanf (v,"%s",&con[x].correo);
}
}



Igual tenes muchas cosas mal, creas estructuras pero despues los valores los guardas independientemente
Si creas estructuras despues no las guardes con fprintf, guardalas con
fread(void *puntero, size_t tamaño, size_t nregistros, FILE *fichero); o fwrite

// copia.c: Copia de ficheros
// Uso: copia <fichero_origen> <fichero_destino>

#include <stdio.h>

int main(int argc, char **argv) {
    FILE *fe, *fs;
    unsigned char buffer[2048]; // Buffer de 2 Kbytes
    int bytesLeidos;

    if(argc != 3) {
       printf("Usar: copia <fichero_origen> <fichero_destino>\n");
       return 1;
    }

    // Abrir el fichero de entrada en lectura y binario
    fe = fopen(argv[1], "rb");
    if(!fe) {
       printf("El fichero %s no existe o no puede ser abierto.\n", argv[1]);
       return 1;
    }
    // Crear o sobreescribir el fichero de salida en binario
    fs = fopen(argv[2], "wb");
    if(!fs) {
       printf("El fichero %s no puede ser creado.\n", argv[2]);
       fclose(fe);
       return 1;
    }
    // Bucle de copia:
    while((bytesLeidos = fread(buffer, 1, 2048, fe)))
       fwrite(buffer, 1, bytesLeidos, fs);
    // Cerrar ficheros:
    fclose(fe);
    fclose(fs);
    return 0;
}



Si vas a guardar las cosas de otra manera ni crees las estructuras
Título: Re:Ayuda con Agenda en C
Publicado por: ReySolARG en Junio 04, 2011, 11:06:33 PM
gracias ale!! ahi probe lo que me dijiste y me hace el mismo probema!!! cuando vuelvo a ejecutar el prog solo me muestra bien el nombre y el mail!!!
Título: Re:Ayuda con Agenda en C
Publicado por: Alejandro_N12 en Junio 04, 2011, 11:48:29 PM
Abri el TXT y donde lo guardas y fijate si te lo guarda bien, para ver si es un error al leerlo o al escribirlo
Título: Re:Ayuda con Agenda en C
Publicado por: ReySolARG en Junio 05, 2011, 12:15:30 AM
no, lo guarda igual q me lo muestra!!!
Título: Re:Ayuda con Agenda en C
Publicado por: Alejandro_N12 en Junio 05, 2011, 12:33:20 AM
Cambia los fscanf por los fread
y los fwrite por los fprintf

fwrite(&reg, sizeof(stRegistro), 1, fichero);

El primer parámetro es el registro
El segundo el tamaño del registro, con la funcion sizeof y entre los parentesis la estructura lo sabes
El tercero es la cantidad a escribir
El cuarto es el nombre del puntero al archivo

Dependiendo si queres escribir los nuevos datos siempre al final antes de agregar podes usar la funcion fseek


Título: Re:Ayuda con Agenda en C
Publicado por: ReySolARG en Junio 05, 2011, 01:41:48 AM
el primer paramtre es el regustro!! cual?? perdon se que es un a pregunta tonta pero a esta hora ya no me da mas!!!!!!!!
Título: Re:Ayuda con Agenda en C
Publicado por: Alejandro_N12 en Junio 05, 2011, 06:34:30 AM
Y el nombre de la variable, en tu caso creo que es con
Título: Re:Ayuda con Agenda en C
Publicado por: ReySolARG en Junio 05, 2011, 12:29:23 PM
si ya lo hice pero me marca un error como que me falta un parentesis  dentro de la funcion fread!!! y no me falta nada!!!
Título: Re:Ayuda con Agenda en C
Publicado por: Alejandro_N12 en Junio 05, 2011, 06:54:23 PM
A ver como pusiste el fread
Título: Re:Ayuda con Agenda en C
Publicado por: ReySolARG en Junio 05, 2011, 07:49:03 PM
fread(&con
  • .nombre,sizeof(con
  • .nombre],1,v);[/b][/i]
Título: Re:Ayuda con Agenda en C
Publicado por: Alejandro_N12 en Junio 05, 2011, 08:04:21 PM
fwrite(&con[x], sizeof(a), 1, v);
Título: Re:Ayuda con Agenda en C
Publicado por: ReySolARG en Junio 05, 2011, 08:22:26 PM
perdon no entendi!! yo lo puse asi:

fread(&con[x].nombre,sizeof(con[x].nombre),1,v);

porque le pones sizeof(a)????
Título: Re:Ayuda con Agenda en C
Publicado por: Alejandro_N12 en Junio 05, 2011, 08:34:17 PM
Porque a es el tipo del registro, y con sizeof le indicas el tamaño

Edit: El segundo parametro te pide el tamaño de lo que vas a guardar, como vas a guardar un registro de tipo a con sizeof podes saber el tamaño que ocupa
Título: Re:Ayuda con Agenda en C
Publicado por: ReySolARG en Junio 05, 2011, 08:41:13 PM
me dice que (a) es simbolo no definido
Título: Re:Ayuda con Agenda en C
Publicado por: Alejandro_N12 en Junio 05, 2011, 09:00:53 PM
#include<stdio.h>

struct chris{
       char name[30];
       int age;
       };
       
       FILE *fp;
       int main();
       int i;
      int main()
{
       struct chris data[10];
       
       fp = fopen("output.dat", "rb");
       
       for( i = 0; i < 10; i ++ )
       {
            printf("Enter name:");
            scanf("%s", &data[i].name);
            printf("Enter agae:");
            scanf("%d", &data[i].age);
            }
           
            fwrite(data, sizeof(struct chris), 10, fp);
            fclose(fp);
           
            fp = fopen("output.dat", "rb");
            fread(data, sizeof(struct chris), 10, fp);
            for( i = 0; i < 10; i ++){
            printf("%s\n", data[i].name);
            printf("%d", data[i].age);
            getch();
            }



Ahi tenes un code de como se usa
Título: Re:Ayuda con Agenda en C
Publicado por: ReySolARG en Junio 05, 2011, 09:04:18 PM
disculpa que sea tan molesto, pero me podrias dar un ejemplo con el codigo de mi agenda? asi se me hace un poco mas facil!!! gracias