/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Ayuda a leer datos de un archivo de texto

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
eze32



Registrado: 17 Sep 2011
Mensajes: 35
Ubicación: Argentina

MensajePublicado: 15/05/2014 5:27 pm
Título: Ayuda a leer datos de un archivo de texto

Hola quiero leer de un archivo llamado agenda.txt con scanf pero al querer abrir el programa me queda la pantalla toda negra, la funcion de guardar datos funciona correctmente ,me gustaría saber cual es el error.

En el archivos de texto sale de la siguiente manera:

Código:

alejandro           quevedo             33373569           44476768       259 1990
fany                quintana            35363569           44587896       118 1993

En el código siguiente no pongo todas las funciones del programa porque funcionaron solo el cargar datos no me funciones :

Código:


#include "stdio.h"
#include "string.h"
#include "conio.h"
#include "stdlib.h"

typedef struct fecha
{
  int dia,
      mes,
      anio;
}t_fecha;

typedef struct
{
    char nombre[20];
    char apellido[20];
    long dni;
    char telefono[16];
    t_fecha f_nac;
}t_amigos;

int guardar_datos(const t_amigos *amigos);
int cargar_datos(t_amigos *amigos);

int main(void)
{

   t_amigos am2[2];
   int i;



   cargar_datos(am2);

   for(i = 0; i < 2;i++)
   {
       printf("Nombre : %s \nApellido : %s \nDni : %ld \ntelefono : %s \nFecha de nacimiento : %d/%d/%d \n\n\n", am2[i].nombre, am2[i].apellido, am2[i].dni, am2[i].telefono,am2[i].f_nac.dia,am2[i].f_nac.mes,am2[i].f_nac.anio);
   }

}

int guardar_datos(const t_amigos *amigos)
{
    FILE *arch;
    int cant_datos = 0;
    char nombre[12];

    printf("Ingrese nombre de archivo(hasta 8 caracteres mas 3 de extension) : ");
    gets(nombre);

    strcat(nombre,".txt");
    if((arch = fopen(nombre,"r")) == NULL)
    {
        if((arch = fopen(nombre,"w")) == NULL)
        {
            printf("No se puede guardar datos");
            getch();
            exit(1);
        }
    }
    else
    {
        printf("Archivo ya existe.");
        fclose(arch);
    }

    while(cant_datos < 2)
    {
        fprintf(arch,"%-20s%-20s%-19ld%-15s%-2d%-2d%-4d\n", (amigos + cant_datos)->nombre, (amigos + cant_datos)->apellido, (amigos + cant_datos)->dni,
                (amigos + cant_datos)->telefono,(amigos + cant_datos)->f_nac.dia, (amigos + cant_datos)->f_nac.mes, (amigos + cant_datos)->f_nac.anio);
        cant_datos++;
    }

    fclose(arch);

    return cant_datos + 1;
}

int cargar_datos(t_amigos *amigos)
{
    FILE *arch;
    int cant_datos = 0;


    if((arch = fopen("agenda.txt","r")) == NULL)
    {
        printf("No se puede guardar datos");
        getch();
        exit(1);
    }

    while(!feof(arch))
    {
      fscanf(arch,"%-20s%-20s%-19ld%-15s%-2d%-2d%-4d\n", &(amigos + cant_datos)->nombre, &(amigos + cant_datos)->apellido,&(amigos + cant_datos)->dni,
                &(amigos + cant_datos)->telefono,&(amigos + cant_datos)->f_nac.dia, &(amigos + cant_datos)->f_nac.mes,&(amigos + cant_datos)->f_nac.anio);
      cant_datos++;
    }

    fclose(arch);
   return cant_datos;
}



Me gustaría saber cual es el error al leer el archivo y querer mostrarlo.
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 7516
Ubicación: Mexico

MensajePublicado: 17/05/2014 6:43 am
Título:

El programa tiene varias deficiencias (partes que si bien no son errores se deberían cambiar):

* Los encabezados parte de la biblioteca estándar de C debes delimitarlos con los caracteres '<' y '>'.
* Hay que evitar el uso de gets y la biblioteca conio de Borland.
* Para el nombre del archivo (nombre corto de MS-DOS) utilizas un array de 12 caracteres cuando debería ser de 13 (el carácter adicional para el '\0').
* No deberías utilizar la función fopen para verificar que un archivo existe porque esa función puede fallar por otras razones.
* No deberías utilizar la función feof para controlar el bucle de lectura del archivo, el programa no revienta por un detalle que no viene al caso comentar. En su lugar utiliza el valor de retorno de la función fscanf.
* etc.

Con todo el programa escribe y lee los datos en/del archivo correctamente, para encontrar el error debes publicar el código fuente completo.

Un saludo
_________________
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com