• Miércoles 6 de Noviembre de 2024, 02:59

Autor Tema:  Errores En Programa Con Archivos  (Leído 1117 veces)

pablo_ivan57

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Errores En Programa Con Archivos
« en: Miércoles 13 de Febrero de 2008, 18:20 »
0
Hola bueno pongo todo el programa:
#include "stdio.h"
#include "conio.h"
#include "string.h"
typedef struct {
        char nombre[50];
        char capital[50];
}paises;
int i=0,indicador=1;
paises nombres[100],pais;
char buff[30];
void ingresardatos(paises *nombres);
void mostrardatos(void);
void modificardatos(paises *nombre);
void escribirdatos(paises *nombre);
char menu(void);
main()
{
  while(indicador){
  switch(menu()){
   case 'A': ingresardatos(nombres);
             break;
   case 'B': mostrardatos();
             break;
   case 'C': modificardatos(nombres);
             break;  
   case 'D': return 0;
             indicador=0;
             break;  
  }
 }
}
void ingresardatos(paises *nombres)
{
  FILE *pt;
  if((pt=fopen("DATOS","rb+"))==NULL)
  {
     printf("Error al leer archivo de datos\n");
     return;
  }
  printf("Ingrese los datos:<<ENTER>> en el campo pais para terminar\n");
  printf("Ingrese el país: ");
  while(*gets(nombres.nombre))
  {
   printf("Ingrese su capital:");
   gets(nombres.capital);
   i++;
   printf("Ingrese el país: ");
  }
  fwrite(nombres,sizeof(paises),i,pt);
  rewind(pt);
}
void mostrardatos(void)
{
  FILE *pt;
  if((pt=fopen("DATOS","rb+"))==NULL)
  {
     printf("Error al leer archivo de datos\n");
     return;
  }
  fread(&pais,sizeof(paises),1,pt);
  while(!feof(pt))
  {
    printf("%-30s%-30s\n",pais.nombre,pais.capital);
    fread(&pais,sizeof(paises),1,pt);
  }
   fclose(pt);
}        
void modificardatos(paises *nombre)
{
  FILE *pt;
 
  int j;
  if((pt=fopen("DATOS","rb+"))==NULL)
  {
     printf("Error al leer archivo de datos\n");
     return;
  }
  rewind(pt);
  printf("Ingrese el nombre del pais a modificar\n");
  for(j=0;;j++)
  {
    gets(buff);
    fread(&pais,sizeof(paises),1,pt);
     if(strcmp(pais.nombre,buff)==0);
      {
      printf("Ingrese el nuevo nombre: ");
      gets(nombres[j].nombre);
      printf("Ingrese la nueva capital: ");
      gets(nombres[j].capital);
      escribirdatos(nombres);
      break;
     }                                  
   }
}
void escribirdatos(paises *nombre)
{
  FILE *pt;
 
  if((pt=fopen("DATOS","rb+"))==NULL)
  {
     printf("Error al leer archivo de datos\n");
     return;
  }    
  fwrite(nombres,sizeof(paises),i,pt);
  rewind(pt);
}
char menu(void)
{
 char c;
 printf("Ingrese la opcion que desea realizar\n");
 printf("A) Ingresar Paises\n");
 printf("B) Listar Paises\n");
 printf("C) Modificar paises\n");
 printf("D) Salir\n");
 scanf("%c",&c);
 while(getchar()!='\n');
 return c;
}
 
Es un programa para guardar datos de paises y sus capitales, y poderlos modificar despúes guardandolo en un archivo.

Los problemas son varios, primero que cuando mando a escribir datos en el archivo se mantiene basura, de archvios anteriores, es decir no sobrescribe la estructura, con los datos nuevos que ingrese.
 Luego otro problema es que al hacer modificaciones void escribirdatos(), no lo hace, no entiendo  porque.
Si es que me pueden ayudar estaria muy agradecido.
Saludos.

patitofeo

  • Miembro MUY activo
  • ***
  • Mensajes: 145
    • Ver Perfil
Re: Errores En Programa Con Archivos
« Respuesta #1 en: Lunes 18 de Febrero de 2008, 19:21 »
0
no he mirado mucho

pero así a primera vista brilla esto:

Código: Text
  1.  
  2. void ingresardatos(paises *nombres)
  3. {
  4. FILE *pt;
  5.  
  6. if((pt=fopen(&#34;DATOS&#34;,&#34;rb+&#34;))==NULL)
  7.  
  8. ....
  9.  
  10.  fwrite(nombres,sizeof(paises),i,pt);
  11. rewind(pt);
  12. }
  13.  
  14.  


y es que si abres el fichero para lectura (opcion "rb+" de fopen)

no vas a poder escribir en el  (fwrite()) luego;

Un saludo