elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


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


  Mostrar Mensajes
Páginas: 1 ... 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 [38] 39 40 41 42 43 44 45 46 47 48 49
371  Programación / Programación C/C++ / Re: Problema en agenda con ficheros en: 10 Febrero 2012, 22:28 pm
Ya lo he solucionado.

Era poniendo getchar(); debajo de

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

(Se me olvidó ese scanf).
372  Programación / Programación C/C++ / Re: Problema en agenda con ficheros en: 10 Febrero 2012, 17:07 pm
Gracias.

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

Saludos.
373  Programación / Programación C/C++ / Re: Problema en agenda con ficheros en: 10 Febrero 2012, 16:18 pm
He puesto
while(getchar()!='\n');
detrás de cuando pido
Código
  1. 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.
374  Programación / Programación C/C++ / Re: Problema en agenda con ficheros en: 10 Febrero 2012, 15:17 pm
¡Muchas gracias! Ya lo he añadido a mi código.

Por ahora tengo esto:

Código
  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+t");
  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.  
  65.           printf("Introduce un nombre: ");
  66.           fgets(datos[i].nombre, 10, stdin);
  67.           while(getchar() != '\n');
  68.           printf("Introduce una direccion: ");
  69.           fgets(datos[i].direccion, 8, stdin);
  70.           printf("Introduce un movil: ");
  71.           scanf("%d",&datos[i].movil);
  72.           while(getchar() != '\n');
  73.           printf("Introduce correo electronico: ");
  74.           fgets(datos[i].email, 50, stdin);
  75.           printf("Introduce dia de nacimiento: ");
  76.           scanf("%d",&datos[i].dia);
  77.           while(getchar() != '\n');
  78.           printf("Introduce mes de nacimiento: ");
  79.           scanf("%d",&datos[i].mes);
  80.           while(getchar() != '\n');
  81.           printf("Introduce ano de nacimiento: ");
  82.           scanf("%d",&datos[i].ano);
  83.           i++;
  84.           break;
  85.      case 2:
  86.           for(j=0;j<=i;j++)
  87.           {
  88.             puts(datos[j].nombre);
  89.           }
  90.  
  91.  
  92.           break;
  93.      case 3:
  94.          printf("Introduce el nombre de la persona de la que desea visualizar los datos:");
  95.          fgets(comprobar, 10, stdin);
  96.  
  97.          for(j=0;j<=i;j++)
  98.          {
  99.            if(strcmp(datos[j].nombre,comprobar)==0)
  100.            {
  101.              printf("Nombre: %s\n",datos[j].nombre);
  102.              printf("Direccion: %s\n",datos[j].direccion);
  103.              printf("Movil: %d\n",datos[j].movil);
  104.              printf("Email: %s\n",datos[j].email);
  105.              printf("Dia de nacimiento: %d\n",datos[j].dia);
  106.              printf("Mes de nacimiento: %d\n",datos[j].mes);
  107.              printf("Ano de nacimiento: %d\n",datos[j].ano);
  108.            }
  109.          }
  110.           break;
  111.      case 4:
  112.           break;
  113.      default:
  114.              printf("Opcion no valida!\n");
  115.    }
  116.  
  117.    }while(opcion<1||opcion>4);
  118.    }while(opcion!=4);
  119.    }
  120.    aux=i;
  121.    for(i=0;i<=aux;i++)
  122.    {
  123.      fprintf(fichero, "%s\n", datos[i].nombre);
  124.      fprintf(fichero, "%s\n", datos[i].direccion);
  125.      fprintf(fichero, "%d\n", datos[i].movil);
  126.      fprintf(fichero, "%s\n", datos[i].email);
  127.      fprintf(fichero, "%d\n", datos[i].dia);
  128.      fprintf(fichero, "%d\n", datos[i].mes);
  129.      fprintf(fichero, "%d\n", datos[i].ano);
  130.      }
  131.   fclose(fichero);
  132.  
  133.    getchar();
  134.    printf("\n\nPulse una tecla para continuar");
  135.    getchar();
  136.    return 0;
  137. }
  138.  

¿Podríais decirme si voy bien? Ya he retirado del código "system("pause");", y lo he sustituido por getchar.

Gracias.

Saludos.
375  Programación / Programación C/C++ / Re: Problema en agenda con ficheros en: 9 Febrero 2012, 19:34 pm
Me parece que tengo el programa terminado, a excepción  de un error.

Cuando pido los datos de las personas, "Introduce el nombre" e "Introduce la dirección" salen seguidos, sin que yo pueda introducir el primer dato.

Código
  1. case 1:
  2.  
  3.           printf("Introduce un nombre: ");
  4.           fgets(datos[i].nombre, 10, stdin);
  5.           printf("Introduce una direccion: ");
  6.           fgets(datos[i].direccion, 15, stdin);
  7.           printf("Introduce un movil: ");
  8.           scanf("%d",&datos[i].movil);
  9.           printf("Introduce correo electronico: ");
  10.           fgets(datos[i].email, 50, stdin);
  11.           printf("Introduce dia de nacimiento: ");
  12.           scanf("%d",&datos[i].dia);
  13.           printf("Introduce mes de nacimiento: ");
  14.           scanf("%d",&datos[i].dia);
  15.           printf("Introduce ano de nacimiento: ");
  16.           scanf("%d",&datos[i].dia);
  17.           i++;
  18.           break;

¿Cuál creéis que es mi error?

Gracias.

Saludos.
376  Programación / Programación C/C++ / Re: Problema en agenda con ficheros en: 9 Febrero 2012, 15:18 pm
¡Muchas gracias, do-while!

Creo que como me lo has explicado es mejor que creando un fichero nuevo para guardar los datos.

377  Programación / Programación C/C++ / Re: Problema en agenda con ficheros en: 8 Febrero 2012, 21:08 pm
¿Al cerrar el fichero "se van" los datos obtenidos con ese fgets del programa?
378  Programación / Programación C/C++ / Re: Problema en agenda con ficheros en: 8 Febrero 2012, 15:18 pm
¿Entonces está bien esto?

Código
  1. while(! feof(fichero)) //Leemos los datos que contiene al principio
  2.    {
  3.      fgets(lineas,25,fichero);
  4.    }
  5.    fclose(fichero);

Lo hago por partes (me refiero a lo de abrir y cerrar el fichero para escribir/leer) porque en el manual que estoy siguiendo en la parte que hay antes del ejercicio no viene nada de cómo hacer las dos cosas (aunque he visto que viene justo después, pero bueno).

Ahora me voy a poner a terminar el programa.

Gracias.

Saludos.
379  Programación / Programación C/C++ / Re: Problema en agenda con ficheros en: 7 Febrero 2012, 23:32 pm
Muchas gracias a los dos. Ahora me tengo que ir ya, pero ya mañana termino el programa y dejo mi código completo.

Saludos.
380  Programación / Programación C/C++ / Re: Problema en agenda con ficheros en: 7 Febrero 2012, 23:18 pm
Pretendo que mientras el fichero no llegue a su fin, lea todas sus líneas (pero por cómo has reaccionado, me parece que voy a tener que quitarlo, seguramente esté mal...).

No había caído en que debía almacenar el resultado de "i++" en un fichero.

Muchas gracias.

Saludos.
Páginas: 1 ... 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 [38] 39 40 41 42 43 44 45 46 47 48 49
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines