Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/02/2012, 10:20
DickGumshoe
 
Fecha de Ingreso: enero-2012
Mensajes: 68
Antigüedad: 12 años, 3 meses
Puntos: 0
Problema creando agenda con ficheros

Hola.

He hecho este código:

Código C:
Ver original
  1. /*Una agenda que maneje los siguientes datos: nombre, dirección, tlf móvil, email, y día,
  2. mes y año de nacimiento (estos tres últimos datos deberán ser números enteros
  3. cortos). Deberá tener capacidad para 100 fichas. Se deberá poder añadir un dato
  4. nuevo, visualizar los nombres de las fichas existentes, o mostrar todos los datos de una
  5. persona (se preguntará al usuario cual es el nombre de esa persona que quiere
  6. visualizar). Al empezar el programa, leerá los datos de un fichero llamado “agenda.dat”
  7. (si existe). Al terminar, guardará todos los datos en ese fichero.*/
  8.  
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12.  
  13. int main()
  14. {
  15.     struct
  16.     {
  17.       char nombre[10];
  18.       char direccion[15];
  19.       int movil;
  20.       char email[20];
  21.       short int dia, mes, ano;
  22.     }datos[100];
  23.     char lineas[500],comprobar[10];
  24.     FILE* fichero;
  25.     int opcion,posicion,tamano,i,j,aux;
  26.    
  27.     fichero = fopen("agenda.dat", "r+b");
  28.     if(fichero != NULL)
  29.     {
  30.    
  31.     while(! feof(fichero)) //Leemos los datos que contiene al principio
  32.     {
  33.       fgets(lineas,25,fichero);
  34.     }
  35.    
  36.     /*posicion actual*/
  37.     posicion = ftell(fichero);
  38.  
  39.     /* final del fichero */
  40.     fseek(fichero,0,SEEK_END);
  41.  
  42.     /* total de lineas */
  43.     tamano = ftell(fichero);
  44.  
  45.    
  46.     fseek(fichero,posicion,SEEK_SET);
  47.  
  48.     i = tamano / sizeof(datos);
  49.    
  50.     do
  51.     {
  52.     do
  53.     {
  54.     printf("Elija una opcion\n");
  55.     printf("1. Introducir datos\n");
  56.     printf("2. Visualizar nombres de las fichas existentes\n");
  57.     printf("3. Mostrar todos los datos de una persona\n");
  58.     printf("4. Salir");
  59.     scanf("%d",&opcion);
  60.    
  61.     switch(opcion)
  62.     {
  63.       case 1:
  64.            printf("Introduce un nombre: ");
  65.            fgets(datos[10].nombre, 10, stdin);
  66.            
  67.            printf("Introduce una direccion: ");
  68.            fgets(datos[i].direccion, 8, stdin);
  69.            printf("Introduce un movil: ");
  70.            scanf("%d",&datos[i].movil);
  71.            while(getchar() != '\n');
  72.            printf("Introduce correo electronico: ");
  73.            fgets(datos[i].email, 50, stdin);
  74.            printf("Introduce dia de nacimiento: ");
  75.            scanf("%d",&datos[i].dia);
  76.            while(getchar() != '\n');
  77.            printf("Introduce mes de nacimiento: ");
  78.            scanf("%d",&datos[i].mes);
  79.            while(getchar() != '\n');
  80.            printf("Introduce ano de nacimiento: ");
  81.            scanf("%d",&datos[i].ano);
  82.            i++;
  83.            break;
  84.       case 2:
  85.            for(j=0;j<=i;j++)
  86.            {
  87.              puts(datos[j].nombre);
  88.            }
  89.              
  90.              
  91.            break;
  92.       case 3:
  93.           printf("Introduce el nombre de la persona de la que desea visualizar los datos:");
  94.           fgets(comprobar, 10, stdin);
  95.          
  96.           for(j=0;j<=i;j++)
  97.           {
  98.             if(strcmp(datos[j].nombre,comprobar)==0)
  99.             {
  100.               printf("Nombre: %s\n",datos[j].nombre);
  101.               printf("Direccion: %s\n",datos[j].direccion);
  102.               printf("Movil: %d\n",datos[j].movil);
  103.               printf("Email: %s\n",datos[j].email);
  104.               printf("Dia de nacimiento: %d\n",datos[j].dia);
  105.               printf("Mes de nacimiento: %d\n",datos[j].mes);
  106.               printf("Ano de nacimiento: %d\n",datos[j].ano);
  107.             }
  108.           }
  109.            break;
  110.       case 4:
  111.            break;
  112.       default:
  113.               printf("Opcion no valida!\n");
  114.     }
  115.    
  116.     }while(opcion<1||opcion>4);
  117.     }while(opcion!=4);
  118.     }
  119.     aux=i;
  120.     for(i=0;i<=aux;i++)
  121.     {
  122.       fprintf(fichero, "%s\n", datos[i].nombre);
  123.       fprintf(fichero, "%s\n", datos[i].direccion);
  124.       fprintf(fichero, "%d\n", datos[i].movil);
  125.       fprintf(fichero, "%s\n", datos[i].email);
  126.       fprintf(fichero, "%d\n", datos[i].dia);
  127.       fprintf(fichero, "%d\n", datos[i].mes);
  128.       fprintf(fichero, "%d\n", datos[i].ano);
  129.       }
  130.    fclose(fichero);
  131.    
  132.     getchar();
  133.     printf("\n\nPulse una tecla para continuar");
  134.     getchar();
  135.     return 0;
  136. }

El problema es en el switch, en el case 1.

Ahí lo que quiero hacer es pedir los datos. Pues, al compilar, en la consola, elijo la opción 1. Directamente me sale "Introduce un nombre: Introduce una direccion: ". Y ahí se detiene para que introduzca la dirección.

¿Qué puedo hacer para que pare en "Introduzca un nombre"?

También me gustaría saber si os parece que el problema está bien planteado, y que si una vez solucionado el error que os acabo de exponer funcionará el programa adecuadamente, o falta algo por hacer.

Gracias.

Saludos.