elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 02:56  


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Problema en agenda con ficheros
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Problema en agenda con ficheros  (Leído 1,110 veces)
DickGumshoe

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: Problema en agenda con ficheros
« Respuesta #15 en: 10 Febrero 2012, 16:18 »

He puesto
while(getchar()!='\n');
detrás de cuando pido
Código
datos[i].nombre
porque sino pasa directamente al segundo dato. Es decir, en la consola, me sale Introduce un nombre: Introduce una direccion:

Y ahí se detiene para que introduzca la dirección.

Ya he editado el código para abrirlo en binario en vez de en fichero de texto.

Gracias.

Saludos.


« Última modificación: 10 Febrero 2012, 16:57 por DickGumshoe » En línea
do-while


Desconectado Desconectado

Mensajes: 604


Cuando me afeito, recuerdo porque me dejo barba.


Ver Perfil
Re: Problema en agenda con ficheros
« Respuesta #16 en: 10 Febrero 2012, 16:54 »

Y yo ya te he dicho en el primer post que he escrito que si te salen los dos mensajes seguidos es porque en alguna parte antes de llamar a tu funcion, has dejado informacion en la entrada. Tambien te he dicho que el codigo que te he dado tienes que usarlo despues de scanf, asi como que si pones despues de fgets los gechar no podras leer los datos de forma correcta (o si, pero sera una tombola).

Tambien te he corregido el hecho de que si pones despues del fgets los getchar, estaras leyendo informacion que no estaras guardando, asi que si te saltan los dos mensajes uno detras de otro poco arreglas leyendo caracteres que no guardas en ninguna parte, lo que estas haciendo es perder datos.

¡Saludos!


En línea

¡¡¡Feliz año nuevo!!!
DickGumshoe

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: Problema en agenda con ficheros
« Respuesta #17 en: 10 Febrero 2012, 17:07 »

Gracias.

Entonces voy a buscar cuándo dejo información antes de llamar a la función.

Saludos.
En línea
DickGumshoe

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: Problema en agenda con ficheros
« Respuesta #18 en: 10 Febrero 2012, 22:28 »

Ya lo he solucionado.

Era poniendo getchar(); debajo de

Código
printf("Elija una opcion\n");
   printf("1. Introducir datos\n");
   printf("2. Visualizar nombres de las fichas existentes\n");
   printf("3. Mostrar todos los datos de una persona\n");
   printf("4. Salir");
   scanf("%d",&opcion);
   getchar();

(Se me olvidó ese scanf).
En línea
do-while


Desconectado Desconectado

Mensajes: 604


Cuando me afeito, recuerdo porque me dejo barba.


Ver Perfil
Re: Problema en agenda con ficheros
« Respuesta #19 en: 11 Febrero 2012, 03:39 »

¡Buenas!

Me alegro de que hayas encontrado el scanf. Ahora recuerda siempre que scanf deja siempre al menos un caracter '\n'. Por lo tanto toma como costumbre terminar de leer el input.

¡Saludos!
En línea

¡¡¡Feliz año nuevo!!!
DickGumshoe

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: Problema en agenda con ficheros
« Respuesta #20 en: 11 Febrero 2012, 21:27 »

Este es el código que me ha quedado al hacer el programa:

Código
/*  Una agenda que maneje los siguientes datos: nombre, dirección, tlf móvil, email, y día,
   mes y año de nacimiento (estos tres últimos datos deberán ser números enteros
   cortos). Deberá tener capacidad para 100 fichas. Se deberá poder añadir un dato
   nuevo, visualizar los nombres de las fichas existentes, o mostrar todos los datos de una
   persona (se preguntará al usuario cual es el nombre de esa persona que quiere
   visualizar). Al empezar el programa, leerá los datos de un fichero llamado “agenda.dat”
   (si existe). Al terminar, guardará todos los datos en ese fichero. */

 
   #include <stdio.h>
   #include <stdlib.h>
   #include <string.h>
 
   int main()
   {
       struct
       {
         char nombre[10];
         char direccion[15];
         int movil;
         char email[20];
          int dia, mes, ano;
       }datos[100];
       char lineas[500],comprobar[10];
       FILE* fichero;
       int opcion,posicion,tamano,i=0,j,aux;
      int c;
       fichero = fopen("agenda.dat", "r+b");
       if(fichero != NULL)
       {
 
       while(!feof(fichero)) //Leemos los datos que contiene el archivo y los almacenamos en datos[100]
       {
         c=fscanf(fichero,"%s",datos[i].nombre);
         fscanf(fichero,"%s",datos[i].direccion);
         fscanf(fichero,"%d",&datos[i].movil);
         fscanf(fichero,"%s",datos[i].email);
         fscanf(fichero,"%d",&datos[i].dia);
         fscanf(fichero,"%d",&datos[i].mes);
         fscanf(fichero,"%d",&datos[i].ano);
         if(c!=-1)i++; // evita incrementar erroneamente
       }
 
 
      rewind(fichero);
 
       do
       {
       do
       {
       printf("Fichas guardadas: %i\n",i);
       printf("Elija una opcion\n");
       printf("1. Introducir datos\n");
       printf("2. Visualizar nombres de las fichas existentes\n");
       printf("3. Mostrar todos los datos de una persona\n");
       printf("4. Salir\n");
       scanf("%d",&opcion);
       getchar();
 
       switch(opcion)
       {
         case 1:
              printf("Introduce un nombre: ");
              scanf("%s",datos[i].nombre);
 
              printf("Introduce una direccion: ");
 
              scanf("%s",datos[i].direccion);
              printf("Introduce un movil: ");
              scanf("%d",&datos[i].movil);
              while(getchar() != '\n');
              printf("Introduce correo electronico: ");
 
              scanf("%s",datos[i].email);
              printf("Introduce dia de nacimiento: ");
              scanf("%d",&datos[i].dia);
              while(getchar() != '\n');
              printf("Introduce mes de nacimiento: ");
              scanf("%d",&datos[i].mes);
              while(getchar() != '\n');
              printf("Introduce ano de nacimiento: ");
              scanf("%d",&datos[i].ano);
              i++;
              break;
         case 2:
              for(j=0;j<i;j++)
              {
                printf("%s\n",datos[j].nombre);
              }
 
 
              break;
         case 3:
             printf("Introduce el nombre de la persona de la que desea visualizar los datos:");
            scanf("%s",comprobar);
             for(j=0;j<i;j++)
             {
               if(strcmp(datos[j].nombre,comprobar)==0)
               {
                 printf("Nombre: %s\n",datos[j].nombre);
                 printf("Direccion: %s\n",datos[j].direccion);
                 printf("Movil: %d\n",datos[j].movil);
                 printf("Email: %s\n",datos[j].email);
                 printf("Dia de nacimiento: %d\n",datos[j].dia);
                 printf("Mes de nacimiento: %d\n",datos[j].mes);
                 printf("Ano de nacimiento: %d\n",datos[j].ano);
               }
             }
              break;
         case 4:
              break;
         default:
                 printf("Opcion no valida!\n");
       }
 
       }while(opcion<1||opcion>4);
 
       }while(opcion!=4);
       }
       aux=i;
       for(i=0;i<aux;i++)
       {
         fprintf(fichero, "%s\n", datos[i].nombre);
         fprintf(fichero, "%s\n", datos[i].direccion);
         fprintf(fichero, "%d\n", datos[i].movil);
         fprintf(fichero, "%s\n", datos[i].email);
         fprintf(fichero, "%d\n", datos[i].dia);
         fprintf(fichero, "%d\n", datos[i].mes);
         fprintf(fichero, "%d\n", datos[i].ano);
         }
      fclose(fichero);
 
       printf("\n\nPulse una tecla para continuar");
       getchar();
       return 0;
   }
 

Saludos.
En línea
s00rk

Desconectado Desconectado

Mensajes: 139



Ver Perfil
Re: Problema en agenda con ficheros
« Respuesta #21 en: 11 Febrero 2012, 21:45 »

Este es el código que me ha quedado al hacer el programa:

Código
/*  Una agenda que maneje los siguientes datos: nombre, dirección, tlf móvil, email, y día,
   mes y año de nacimiento (estos tres últimos datos deberán ser números enteros
   cortos). Deberá tener capacidad para 100 fichas. Se deberá poder añadir un dato
   nuevo, visualizar los nombres de las fichas existentes, o mostrar todos los datos de una
   persona (se preguntará al usuario cual es el nombre de esa persona que quiere
   visualizar). Al empezar el programa, leerá los datos de un fichero llamado “agenda.dat”
   (si existe). Al terminar, guardará todos los datos en ese fichero. */

 
   #include <stdio.h>
   #include <stdlib.h>
   #include <string.h>
 
   int main()
   {
       struct
       {
         char nombre[10];
         char direccion[15];
         int movil;
         char email[20];
          int dia, mes, ano;
       }datos[100];
       char lineas[500],comprobar[10];
       FILE* fichero;
       int opcion,posicion,tamano,i=0,j,aux;
      int c;
       fichero = fopen("agenda.dat", "r+b");
       if(fichero != NULL)
       {
 
       while(!feof(fichero)) //Leemos los datos que contiene el archivo y los almacenamos en datos[100]
       {
         c=fscanf(fichero,"%s",datos[i].nombre);
         fscanf(fichero,"%s",datos[i].direccion);
         fscanf(fichero,"%d",&datos[i].movil);
         fscanf(fichero,"%s",datos[i].email);
         fscanf(fichero,"%d",&datos[i].dia);
         fscanf(fichero,"%d",&datos[i].mes);
         fscanf(fichero,"%d",&datos[i].ano);
         if(c!=-1)i++; // evita incrementar erroneamente
       }
 
 
      rewind(fichero);
 
       do
       {
       do
       {
       printf("Fichas guardadas: %i\n",i);
       printf("Elija una opcion\n");
       printf("1. Introducir datos\n");
       printf("2. Visualizar nombres de las fichas existentes\n");
       printf("3. Mostrar todos los datos de una persona\n");
       printf("4. Salir\n");
       scanf("%d",&opcion);
       getchar();
 
       switch(opcion)
       {
         case 1:
              printf("Introduce un nombre: ");
              scanf("%s",datos[i].nombre);
 
              printf("Introduce una direccion: ");
 
              scanf("%s",datos[i].direccion);
              printf("Introduce un movil: ");
              scanf("%d",&datos[i].movil);
              while(getchar() != '\n');
              printf("Introduce correo electronico: ");
 
              scanf("%s",datos[i].email);
              printf("Introduce dia de nacimiento: ");
              scanf("%d",&datos[i].dia);
              while(getchar() != '\n');
              printf("Introduce mes de nacimiento: ");
              scanf("%d",&datos[i].mes);
              while(getchar() != '\n');
              printf("Introduce ano de nacimiento: ");
              scanf("%d",&datos[i].ano);
              i++;
              break;
         case 2:
              for(j=0;j<i;j++)
              {
                printf("%s\n",datos[j].nombre);
              }
 
 
              break;
         case 3:
             printf("Introduce el nombre de la persona de la que desea visualizar los datos:");
            scanf("%s",comprobar);
             for(j=0;j<i;j++)
             {
               if(strcmp(datos[j].nombre,comprobar)==0)
               {
                 printf("Nombre: %s\n",datos[j].nombre);
                 printf("Direccion: %s\n",datos[j].direccion);
                 printf("Movil: %d\n",datos[j].movil);
                 printf("Email: %s\n",datos[j].email);
                 printf("Dia de nacimiento: %d\n",datos[j].dia);
                 printf("Mes de nacimiento: %d\n",datos[j].mes);
                 printf("Ano de nacimiento: %d\n",datos[j].ano);
               }
             }
              break;
         case 4:
              break;
         default:
                 printf("Opcion no valida!\n");
       }
 
       }while(opcion<1||opcion>4);
 
       }while(opcion!=4);
       }
       aux=i;
       for(i=0;i<aux;i++)
       {
         fprintf(fichero, "%s\n", datos[i].nombre);
         fprintf(fichero, "%s\n", datos[i].direccion);
         fprintf(fichero, "%d\n", datos[i].movil);
         fprintf(fichero, "%s\n", datos[i].email);
         fprintf(fichero, "%d\n", datos[i].dia);
         fprintf(fichero, "%d\n", datos[i].mes);
         fprintf(fichero, "%d\n", datos[i].ano);
         }
      fclose(fichero);
 
       printf("\n\nPulse una tecla para continuar");
       getchar();
       return 0;
   }
 

Saludos.

o.O
Exelente, solamente lo que yo talvez agregaria es que a la hora de Agregar un nuevo dato, seria comprobar que no haya mas de 100 datos ya dentro, porque si ya hay 100 e intentas agregar uno nuevo pues dara error, creo que seria lo unico que yo le agregaria.
En línea

DickGumshoe

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: Problema en agenda con ficheros
« Respuesta #22 en: 11 Febrero 2012, 22:44 »

¡Muchas gracias! Se me olvidó poner eso. Ya lo he añadido.

Saludos.
En línea
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.831


I'Love...!¡.


Ver Perfil WWW
Re: Problema en agenda con ficheros
« Respuesta #23 en: 12 Febrero 2012, 01:31 »

Un consejo cuando sean registros estructurados es mejor usar una BDD en este caso te recomiendo que uses SQLite, asi tus consultas son mas rápidas y no te complicas tanto con códigos largos y complejos y en si el desarrollo de tu aplicación sera mas rápido y simple.

http://www.sqlite.org/

Dulces Lunas!¡.
« Última modificación: 12 Febrero 2012, 01:33 por BlackZeroX (Astaroth) » En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
DickGumshoe

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: Problema en agenda con ficheros
« Respuesta #24 en: 12 Febrero 2012, 11:48 »

Gracias por la recomendación.

He estado mirando la página que me has pasado y otras que he encontrado por Internet, y parece muy buena la librería. Todavía no he empezado a usar librerías no incluidas en el compilador, pero cuando termine de leer el manual que estoy siguiendo y de hacer los ejercicios que vienen en él, empezaré a usar librerías que no vienen en el compilador (entre ellas esta que me has pasado).

Saludos y gracias.
En línea
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Nokia N81] Problema con numeros de agenda :/
Dispositivos Móviles (PDA's, Smartphones)
Alex_bro 0 436 Último mensaje 10 Enero 2009, 17:57
por Alex_bro
Problema programa Agenda « 1 2 »
Programación C/C++
h0oke 27 1,579 Último mensaje 28 Julio 2009, 21:06
por h0oke
Problema programando una agenda
Java
Fastolfe 2 1,591 Último mensaje 17 Marzo 2011, 16:02
por Fastolfe
Problema al hacer una Agenda Telefonica en C++
Programación C/C++
Y2J 10 1,868 Último mensaje 19 Agosto 2011, 18:21
por Y2J
problema con ejercicio de agenda con punteros
Programación C/C++
attackers 3 518 Último mensaje 17 Noviembre 2011, 04:41
por attackers
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines