Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - DickGumshoe

#381
Hola.

Haciendo un ejercicio me he encontrado una duda.

Es este:

/*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];
      short int dia, mes, ano;
    }datos[100];
    char lineas[500];
    FILE* fichero;
    int opcion;
   
    fichero = fopen("agenda.dat", "rt");
    if(fichero != NULL)
    {
   
    while(! feof(fichero)) //Leemos los datos que contiene al principio
    {
      fgets(lineas,25,fichero);
    }
    fclose(fichero);
   
    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");
    scanf("%d",&opcion);
   
    switch(opcion)
    {
      case 1:
           //En construcción, lo editaré según las respuestas que obtenga al preguntaros.
           break;
      case 2:
           //En construcción, lo editaré según las respuestas que obtenga al preguntaros.
           break;
      case 3:
           //En construcción, lo editaré según las respuestas que obtenga al preguntaros.
           break;
      default:
              printf("Opcion no valida");
    }
    }
   
   
   
   
    system("pause");
    return 0;
}



La idea que estoy siguiendo es que primero abro el archivo en modo de lectura. Entonces pongo los casos en los que tiene que leer el archivo, y los casos en los que no. Cierro el archivo.

Después, creo un switch, en el que elijo una de las tres opciones, y ahí planteo cada cosa.

Y, finalmente, abro de nuevo el archivo, pero esta vez para escribir, y meto los datos obtenidos en el switch.

Mi problema es que no sé cómo hacer para que al cerrar el programa y volver a abrirlo sepa que ya he metido un número determinado de fichas (no sé si me explico). Creo que solo es con un do-while en el switch de "añadir datos", sumándole uno a "i", pero no estoy seguro.

También me gustaría saber si veis bien como he planteado el problema, para ver cómo puedo cambiar las cosas.

Muchísimas gracias.

Saludos.
#382
Muchísimas gracias.

Ya he entendido cómo se hace.

Saludos.
#383
Gracias por contestar.

Eso lo tengo, aunque de otra forma (comparando "pausar" con "").

Lo que me falta es que cada 25 líneas pare, que no sé cómo podría hacerlo...
#384
A mí con ese mismo código (el que puse yo, que era el tuyo pero con gets en vez de fgets), me he funcionado bien. Poniendo hola.txt (mi archivo se llama hola). Será entonces porque usas Linux y yo Windows...
#385
Como dije en el otro mensaje. ¿Has probado ya a poner en la consola el nombre del archivo seguido de .txt o la extensión que tenga tu archivo?

Si es así, no se me ocurre qué puede fallar.

Yo uso Windows, pero creo (aunque no estoy seguro) que en este caso es igual.
#386
¿Seguro que poniendo esto no te va?

#include <stdio.h>
#include <stdlib.h>

int openbin(void);

int main(){

openbin();
return 0;

}

int openbin(void){

   FILE *pfile;
   char namebin[50];
        printf("Name:\n");

        gets(namebin);
   if ((pfile = fopen(namebin, "rb"))== NULL)
   {
      printf("Couldn't open the file\n");
      exit(1);
   }
   printf("The file was opened successfully\n");
   
   return 0;
}


Si es eso lo que has puesto, cuando te pida el nombre del archivo en la consola, pon el nombre del fichero seguido de .txt (o la extensión que tenga).
#387
Vale, he solucionado uno de los problemas. Ya me reconoce cuándo existe y cuándo no un archivo. Lo que he hecho ha sido sustituir fgets por gets.

Pero todavía me queda la otra parte del problema.

Gracias.

Saludos.
#388
Hola.

Estoy empezando con el tema de ficheros.

Tengo este ejercicio:

/*Un programa que pregunte un nombre de fichero y muestre en pantalla el contenido de
ese fichero, haciendo una pausa después de cada 25 líneas, para que dé tiempo a
leerlo. Cuando el usuario pulse intro, se mostrarán las siguientes 25 líneas, y así hasta
que termine el fichero.*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main()
{
    FILE* fichero;
    char nombre[50];
    char linea[81];
    char pausar[2];
    int i;
   
    printf("Introduce un nombre");
    fgets(nombre,49,stdin);
    i=0;
fichero = fopen(nombre, "rt");
if (fichero == NULL)
{
printf("No existe el fichero!\n");
exit(1);
}
while (! feof(fichero)) {
                i=i+25;
fgets(linea, i, fichero);
puts(linea);
do{
gets(pausar);
}
while(strcmp(pausar,"")!=0);           

}

fclose(fichero);
   
    system("pause");
    return 0;
}


Pero tengo varias cosas mal:

- Siempre me dice que el fichero no existe.
- No consigo que pare cada 25 líneas hasta que presione intro sin escribir nada (lo que he conseguido ha sido cada X letras...).

Muchas gracias.

Saludos.
#389
Pues yo utilizo la misma versión de tu compilador (DEV-C++ 4.9.9.2), y sin usar esa librería no me compila bien xD (y, de hecho, en los manuales que tengo viene que es necesario usar dicha librería...)
#390
¿La tercera librería?

Esa contiene strcmp, necesario para hacer la comparación. ¿Te compiló sin usarla?