• Domingo 15 de Diciembre de 2024, 02:05

Autor Tema:  Problema Extraño Al Tratar De Escribir Un Archivo.  (Leído 1199 veces)

Valtiel

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Problema Extraño Al Tratar De Escribir Un Archivo.
« en: Domingo 22 de Julio de 2007, 01:58 »
0
Hola.

Estoy haciendo un programa (bancario) mas o menos simple, que debe almacenar los datos de un cliente en 3 archivos distintos. En uno iran los datos pesonales, en el segundo los tipos de transacciones, y en el tercero las transacciones mismas.

El problema surge al tratar de escribir en el tercer archivo, ya que al ingresar cualquier valor, en el archivo solo se muestran caracteres extraños (cuadrados y otras cosas).

He tratado de todo a mi alcance y no doy con la solucion. Es extraño porque los 2 primeros archivos se escriben sin ningun problema, pero el tercero lo escribe mal, siendo que esta todo declarado exactamente igual que los otros 2. La diferencia esta en que en este archivo estoy escribiendo un numero traido desde una variable de tipo int, pero no es eso, ya que ingresando el valor desde un char sucede lo mismo.

Este es el codigo (compila perfectamente, por si quieren pegarlo en su compilador y probarlo):

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

struct _person{
char nombre[20];
char paterno[14];
char materno[14];
char rut[10];
char correo[20];
char edad[10];
char direccion[50];
char ncuenta[20];
};

struct _person datosper;

struct _tipot{
char tipotrans[15];
char desc[100];
char dep[];
char giro[];
char trasp[];
char ab[];
char cdep[];
char cgiro[];
char ctrasp[];
char cab[];
int monto;
};

struct _tipot tip={
"",
"",
"deposito",
"giro",
"traspaso",
"abono",
"001",
"002",
"003",
"004",
};



void main()
{
   FILE *personales,*tipotrans,*trans;
   int i,sel,sw1=0,sw2=0;
   personales=fopen("DatosPersonales.txt","a+");
   tipotrans=fopen("TipoTransacciones.txt","a+");
   trans=fopen("Transacciones.txt","a+");

   if(personales==NULL || tipotrans==NULL || trans==NULL)
   {
      printf("problemas con el archivo");
      exit(1);
   }
   printf("Nombre:");
   gets(datosper.nombre);
   fwrite(datosper.nombre,sizeof(datosper.nombre),1,personales);

   printf("Apellido paterno:");
   gets(datosper.paterno);
   fwrite(datosper.paterno,sizeof(datosper.paterno),1,personales);

   printf("Apellido materno:");
   gets(datosper.materno);
   fwrite(datosper.materno,sizeof(datosper.materno),1,personales);

   do
   {
      printf("Correo electronico:");
      gets(datosper.correo);
      for(i=0;i<20;i++)
      {
         if(datosper.correo=='@')
            sw1=1;
         if(datosper.correo=='.')
            sw2=1;
      }
      if(sw1!=1 || sw2!=1)
      {
         printf("correo no valido\n");
         sw1=0;
         sw2=0;
      }
   }while((sw1!=1) || (sw2!=1));
   fwrite(datosper.correo,sizeof(datosper.correo),1,personales);
   sw1=0; sw2=0;
   do
   {
      printf("RUT (sin puntos): ");
      gets(datosper.rut);
      for(i=0;i<10;i++)
      {
         if(datosper.rut=='-')
            sw1=1;
      }
      if(sw1!=1)
         printf("Ingrese su rut incluyendo guion \n");

   }
   while(sw1!=1);
   fwrite(datosper.rut,sizeof(datosper.rut),1,personales);
   sw1=0;

   printf("Edad:");
   gets(datosper.edad);
   fwrite(datosper.edad,sizeof(datosper.edad),1,personales);

   printf("Direccion: ");
   gets(datosper.direccion);
   fwrite(datosper.direccion,sizeof(datosper.direccion),1,personales);

   printf("Numero de cuenta: ");
   gets(datosper.ncuenta);
   fwrite(datosper.ncuenta,sizeof(datosper.ncuenta),1,personales);

//------------------------------------------------------------

   printf("\n\nSeleccione el tipo de transaccion que desea realizar:\n\n");
   printf("a) Deposito\n");
   printf("b) Giro\n");
   printf("c) Traspaso\n");
   printf("d) abono\n\n");
   sel=getch();
   switch(sel)
   {
      case'a': fputs(tip.cdep,tipotrans);
               printf("Monto: ");
               scanf("%d",&tip.monto);
               fwrite(&tip.monto,sizeof(&tip.monto),1,trans);
   }

getche();
}


Gracias de antemano.

Emperorxdevil

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Problema Extraño Al Tratar De Escribir Un Archivo.
« Respuesta #1 en: Domingo 22 de Julio de 2007, 23:41 »
0
Asi a golpe de vista me choca esto:

Código: Text
  1.  
  2. struct _tipot{
  3. char tipotrans[15];
  4. char desc[100];
  5. char dep[];
  6. char giro[];
  7. char trasp[];  /* Tamaño sin definir, tampoco incializados */
  8. char ab[];
  9. char cdep[];
  10. char cgiro[];
  11. char ctrasp[];
  12. char cab[];
  13. int monto;
  14. };
  15.  
  16.  

Define la longitud de los arrays o inicialos con valor (dices que compila, pero yo creo que no).

Luego deshazte de esto (no sirve para nada) no es ANSI y usa getchar, funciona esactamente igual.

Código: Text
  1.  
  2. #include &#60;conio.h&#62;
  3.  
  4. getch();
  5.  
  6. getche()
  7.  
  8.  

Y cierra los archivos que abras hombre, que no he visto fclose por ningun lao.

Despues de esto, a ver que es lo que falla.

Salu2