[SOLUCIONADO] Ayuda con Agenda en C

Iniciado por ReySolARG, Junio 04, 2011, 12:49:55 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Junio 04, 2011, 12:49:55 AM Ultima modificación: Febrero 04, 2015, 10:15:34 PM por Expermicid
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

Código: c

////////////////////////////////////////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");
      }


}



perdon hay printf que no me los ha tomado al pasarlos aca!!! saludos

Junio 04, 2011, 01:23:10 AM #2 Ultima modificación: Junio 04, 2011, 01:24:45 AM por Xt3mP
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)

Código: C

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


Ten por seguro que muy pronto resolveran tu duda.
Cada vez que me das Karma me motivas

Ok gracias amigo y disculpa!!!

cambia el modo de apertura del archivo a "r+" y cuentame :)
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta



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!!!

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.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta



ya lo hice!! probe con (a+) y (r+) pero cuando cierro y abro el programa no me levanta el archivo

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...

Código: php
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:

Código: php
palabra1 palabra2
palabra3 palabra4


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

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:
Código: php

X palabra1 palabra2
palabra3 palabra4 


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

espero que se halla entendido :)
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta



Excelente explicacion y muchas gracias por tu tiempo!!! pero me marie mas!!! jajajaja!!!
que debo modificarle o agragarle al codigo que tengo?

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.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta




Junio 04, 2011, 07:55:07 PM #12 Ultima modificación: Junio 04, 2011, 08:05:50 PM por Alejandro_N12
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

ok me podrias dar un ejmplo del odigo de coo quedaria?

Junio 04, 2011, 08:18:02 PM #14 Ultima modificación: Febrero 08, 2014, 05:15:19 PM por Expermicid
Antes de la carga de datos pone

Código: c
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

Junio 04, 2011, 08:20:27 PM #15 Ultima modificación: Febrero 08, 2014, 05:15:30 PM por Expermicid
Prueba si te anda bien, así, es lo que yo te decía:
Código: c
////////////////////////////////////////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
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta



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!!!

Algún mod. global que edite los mensajes de ReySolARG que esta meta hacer doble post.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


Ahi borre los doble post
@ReySolARG, intenta poner todo en un solo posteo


Disculpen no se enojen!! no fue mi intencion!! este mensaje tambien es doble post?