• Sábado 14 de Diciembre de 2024, 21:58

Autor Tema:  Problemas con los registros  (Leído 2226 veces)

cazador.asesino

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Problemas con los registros
« en: Jueves 10 de Julio de 2008, 01:14 »
0
Al leer Registro.Codigo y despues Registro.Nombre, me almacena parte del nombre en el codigo, por que puede ser..



void IngresarRegAlumno()
{
   char Codigo[9];
   system("cls");

   cout << "nr INGRESAR REGISTROS DE ALUMNOS ";
   F = fopen("Alumnos.Sec","rb+");
   if(F == NULL)
   {
      F = fopen("Alumnos.Sec","wb");
   }

   cout << "nnnrCodigo  ---> ";

   Leercod(Registro.Cod,14,5);
   //Test del código
   //cout<<"nEste es el codigo: "<<Codigo;

   fread(&Registro,sizeof(Registro),1,F);
   while(!feof(F))
   {
      if(strcmp(Registro.Cod,Codigo)==0)
      {
         cout << "nnnrRegistro DUPLICADO ...!!!";
         fclose(F);
         getch();
         return;
      }
      fread(&Registro,sizeof(Registro),1,F);
   }
   strcpy(Registro.Cod,"         ");
   strcpy(Registro.Cod,Codigo);
   //Test del Código
   //cout<<"nEste es el codigo: "<<Registro.Cod;

   cout<< "nrNombre ----> ";
   //strcpy(Registro.Nombre,"                                                ");
   Leernom(Registro.Nombre,14,6);
   //cout<<"nEste es eL NOM: "<<Registro.Nombre;

   //Test del Código
   //cout<<"nEste es el codigo: "<<Registro.Cod;
   strcpy(Registro.Cod,"         ");
   strcpy(Registro.Cod,Codigo);

   cout<< "nrPeso ------> ";
   Registro.Peso=0;
   cin>> Registro.Peso;

   cout<< "nrEscuela ---> ";
   strcpy(Registro.Escuela,"");
   cin>> Registro.Escuela;

   do
   {
      system("cls");
      cout << "nr                       AUTOSEGURO  DE   ALUMNOS ";
      cout << "nr";
      cout << "nr Ingrese 1 Si Cancelo Autoseguro.-";
      cout << "nr Ingrese 2 Si No Cancelo Autoseguro.-" ;
      cout << "nr";
      cout << "nr Condicion--> ";
      Registro.Cond = LeerInt(15,7,9);
      //cin >> Registro.Cond;
   }while(Registro.Cond<=0 || Registro.Cond>2);

   fwrite(&Registro, sizeof(Registro), 1, F);
   fclose(F);
   cout << "nnnrALUMNO registrado !!!n";
   cout << "nr<<< ... PRESIONE ENTER para continuar >>>";
   getch();
   return;
}

Elforious

  • Miembro activo
  • **
  • Mensajes: 44
    • Ver Perfil
Re: Problemas con los registros
« Respuesta #1 en: Jueves 10 de Julio de 2008, 16:45 »
0
Tu código me confundió un poco, creo que no estás leyendo el código en la variable "Codigo", sino en "Registro.Cod" (no estoy seguro de lo que hace tu función "Leercod()"), y estarías comparando al código con basura en el if
Código: Text
  1.  
  2. if(strcmp(Registro.Cod,Codigo)==0)
  3.  
  4.  

Creo que tu problema está en que sie estás usando el gotoxy() en tus funciones de Leer, para el código le estás mandando una posición demás. (eso creo)

Te aconsejo estructurarlo mas, puede ser en dos funciones más: Recoger_Datos (mandando al registro por Referencia y una cadena larga para registrar los errores)  y Grabar_Datos (mandando al registro para guardarlo), y si en Recoger_Datos no se repite el código y demás cosas, muestras el error ocurrido grabados en la cadena.

Algo así:

Código: Text
  1.  
  2. // Suponiendo que tu tipo registro es "rA"
  3. void IngresarRegAlumno()
  4. {
  5.     rA Registro;
  6.     char Error_Generado[200];
  7.  
  8.     Recoger_Datos(Registro, Error_Generado); // Para la lógica con el Interfaz
  9.  
  10.     if(strlen(Error_Generado) == 0)
  11.     {
  12.         Grabar_Datos(Registro, Error_Generado);  // Para la lógica con el Archivo
  13.     }
  14.  
  15.     if(strlen(Error_Generado) > 0)
  16.     {
  17.         cout << Error_Generado;
  18.     }
  19.     else
  20.     {
  21.         cout << "Guardado!";
  22.     }
  23. }
  24.  
  25.  

Espero haber ayudado.

gonza_fs

  • Nuevo Miembro
  • *
  • Mensajes: 24
    • Ver Perfil
Re: Problemas con los registros
« Respuesta #2 en: Jueves 10 de Julio de 2008, 19:00 »
0
Que tal, no estoy seguro, pero uno de tus problemas puede ser este:

strcpy(Registro.Cod," ");
strcpy(Registro.Cod,Codigo);

Supongo que lo que intentaste hacer, fue poner el codigo de registro en vacio para luego copiar el nuevo codigo. Pero en este caso has puesto un espacio entre las comillas dobles. Proba poniendo "" (comillas dobles sin espacio), o bien "" (caracter nulo). Generalmente este tipo de problemas se deba a que en algun momento no se estan detectando los caracteres nulos o de cierre.
Podes hacer una prueba ingresando "a mano" el caracter "", al final de cada char* que hayas creado. A ver si esto resuelve tu problema. Esto es ineficiente y no se deberia realizar asi, pero solo te lo recomiendo a modo de prueba a ver si ya no te devuelve basura en donde corresponda.

cazador.asesino

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Problemas con los registros
« Respuesta #3 en: Viernes 11 de Julio de 2008, 00:44 »
0
Voy a probar, gracias por el interés..Ya les aviso si funciono  :good:

cazador.asesino

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Problemas con los registros
« Respuesta #4 en: Viernes 11 de Julio de 2008, 03:14 »
0
aHI LES VA todo para que me ayuden(lo anterior no funcionó)

Código: Text
  1. /**
  2. *  NombreProg:  Alumnos
  3. *  Descripcion: Archivo de registro de alumnos
  4. *
  5. *   AUTORES: Yoy alguien más
  6.        
  7. *  Fecha:  07 de Diciembre de 2007
  8. */
  9. #include <iostream.h>
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include <string.h>
  13. #include <conio.h>
  14. #include <ctype.h>
  15.  
  16. struct ALUMNO
  17. {
  18.     char Cod[9];
  19.    char Nombre[50];
  20.    char Escuela[4];
  21.    float Peso;
  22.    int Cond;
  23. };
  24.  
  25. struct ALUMNO Registro;
  26.  
  27. FILE *F;
  28.  
  29. int  MenuAlumno();
  30. void IngresarRegAlumno();
  31. void BuscarxCodAlumno();
  32. void MostrarRegAlumno();
  33. void EliminacionxCodAlumno();
  34. void EliminacionFisicaxCodAlumno();
  35. void ActualizacionxCodAlumno();
  36. /***********************************************************************************/
  37. //Cabecera del llamado a funciones validar enteros de tamaño definido.
  38. int ConvCadDig_Int(char *c);
  39. int LeerCadDig(char *c,int x,int y,int tam);
  40. int LeerInt(int x,int y,int tam);   //Funcion a utilizar
  41. /***********************************************************************************/
  42. int Leercod(char c[9],int x,int y);
  43. int Leernom(char c[50],int x,int y);
  44. int main()
  45. {
  46.    int Opcion;
  47.    do
  48.    {
  49.       Opcion = MenuAlumno();
  50.       switch(Opcion)
  51.       {
  52.         case 1 : IngresarRegAlumno();
  53.                   break;
  54.          case 2 : BuscarxCodAlumno();
  55.                   break;
  56.          case 3 : ActualizacionxCodAlumno();
  57.                     break;
  58.          case 4 : EliminacionxCodAlumno();
  59.                   break;
  60.          case 5 : EliminacionFisicaxCodAlumno();
  61.                   break;
  62.          case 6 : MostrarRegAlumno();
  63.                   break;
  64.       }
  65.    }while(Opcion != 0);
  66.    system("pause");
  67.    return(0);
  68. }
  69.  
  70. int  MenuAlumno()
  71. {
  72.    int i;
  73.    do
  74.    {
  75.       system("cls");
  76.       cout << "nnr      U N I V E R S I D A D  N A C I O N A L  D E  I N G E N I E R I A ";
  77.       cout << "nnr                D E P A R T A M E N T O       M E D I C O      ";
  78.       cout << "nnr                       ARCHIVO  DE   ALUMNOS ";
  79.       cout << "nr";
  80.       cout << "nnnr 1.- INGRESAR REGISTRO DE ALUMNOS";
  81.       cout << "nr 2.- BUSCAR ALUMNOS POR CODIGO";
  82.       cout << "nr 3.- ACTUALIZAR DATOS DE ALUMNOS";
  83.       cout << "nr 4.- ElIMINACION DE REGISTRO DE ALUMNOS ";
  84.       cout << "nr 5.- LIMPIAR REGISTROS ";
  85.       cout << "nr 6.- MOSTRAR REGISTROS";
  86.       cout << "nr 0.- TERMINAR";
  87.  
  88.       cout << "nnnr Seleccione su opcion ---> ";
  89.       i=LeerInt(28,20,1);
  90.       //cin >> i;
  91.    }while(i<0 || i>6);
  92.    return(i);
  93. }
  94.  
  95. void IngresarRegAlumno()
  96. {
  97.    char Codigo[9];
  98.    system("cls");
  99.  
  100.    cout << "nr INGRESAR REGISTROS DE ALUMNOS ";
  101.    F = fopen("Alumnos.Sec","rb+");
  102.    if(F == NULL)
  103.    {
  104.     F = fopen("Alumnos.Sec","wb");
  105.    }
  106.  
  107.    cout << "nnnrCodigo  ---> ";
  108.  
  109.    Leercod(Codigo,14,5);
  110.    getch();
  111.    //Test del código
  112.    //cout<<"nEste es el codigo: "<<Codigo;
  113.  
  114.    fread(&Registro,sizeof(Registro),1,F);
  115.    while(!feof(F))
  116.    {
  117.       if(strcmp(Registro.Cod,Codigo)==0)
  118.       {
  119.          cout << "nnnrRegistro DUPLICADO ...!!!";
  120.          fclose(F);
  121.          getch();
  122.          return;
  123.       }
  124.       fread(&Registro,sizeof(Registro),1,F);
  125.    }
  126.    //strcpy(Registro.Cod,"");
  127.    //strcpy(Registro.Cod,Codigo);
  128.  
  129.    //Test del Código
  130.    //cout<<"nEste es el codigo: "<<Registro.Cod;
  131.  
  132.    cout<< "nrNombre ----> ";
  133.    //strcpy(Registro.Nombre,"
  134.  
  135.    //Aquí esta el error a solucionar
  136.    Leernom(Registro.Nombre,14,6);
  137.  
  138.    //cout<<"nEste es eL NOMBRE: "<<Registro.Nombre;
  139.  
  140.    //Test del Código
  141.    //cout<<"nEste es el codigo: "<<Registro.Cod;
  142.    //strcpy(Registro.Cod,"");
  143.    //strcpy(Registro.Cod,Codigo);
  144.  
  145.    cout<< "nrPeso ------> ";
  146.    Registro.Peso=0;
  147.    cin>> Registro.Peso;
  148.  
  149.    cout<< "nrEscuela ---> ";
  150.    strcpy(Registro.Escuela,"");
  151.    cin>> Registro.Escuela;
  152.  
  153.    do
  154.    {
  155.     system("cls");
  156.       cout << "nr                       AUTOSEGURO  DE   ALUMNOS ";
  157.       cout << "nr";
  158.       cout << "nr Ingrese 1 Si Cancelo Autoseguro.-";
  159.       cout << "nr Ingrese 2 Si No Cancelo Autoseguro.-" ;
  160.       cout << "nr";
  161.       cout << "nr Condicion--> ";
  162.       Registro.Cond = LeerInt(15,7,9);
  163.     //cin >> Registro.Cond;
  164.    }while(Registro.Cond<=0 || Registro.Cond>2);
  165.  
  166.    fwrite(&Registro, sizeof(Registro), 1, F);
  167.    fclose(F);
  168.    cout << "nnnrALUMNO registrado !!!n";
  169.    cout << "nr<<< ... PRESIONE ENTER para continuar >>>";
  170.    getch();
  171.    return;
  172. }
  173.  
  174. void MostrarRegAlumno()
  175. {
  176.     int i=0;
  177.    system("cls");
  178.  
  179.    cout << "nrtttLISTADO DE REGISTROS DE ALUMNOS";
  180.    F = fopen("Alumnos.Sec","rb");
  181.    if(F == NULL)
  182.    {
  183.       cout << "nnnrNo existe el archivo !!!n";
  184.       cout << "nr<<< ... PRESIONE ENTER para continuar >>>";
  185.       getch();
  186.       return;
  187.    }
  188.  
  189.    cout << "nr===============================================================================";
  190.    cout << "nr CODIGO         NOMBRES  Y  APELLIDOS             ESCUELA      PESO   CONDICION    ";
  191.    cout << "r-------------------------------------------------------------------------------    ";
  192.    fread(&Registro, sizeof(Registro), 1, F);
  193.    while(!feof(F))
  194.    {
  195.       gotoxy(2,7+i);
  196.       cout<<Registro.Cod;
  197.  
  198.       gotoxy(17,7+i);
  199.       cout<<Registro.Nombre;
  200.       //printf("%s",&Registro.Nombre);
  201.  
  202.       gotoxy(53,7+i);
  203.       cout<<Registro.Escuela;
  204.  
  205.       gotoxy(65,7+i);
  206.       cout<<Registro.Peso;
  207.  
  208.       gotoxy(75,7+i);
  209.       cout<<Registro.Cond;
  210.  
  211.       i=i+1;
  212.     //printf("nr%9it%-30st%8st%-6.1f%6it",Registro.Cod,Registro.Nombre,Registro.Escuela,Registro.Peso,Registro.Cond);
  213.       fread(&Registro,sizeof(Registro),1,F);
  214.    }
  215.    fclose(F);
  216.    cout << "nnr------------------------------------------------------------------------------";
  217.    cout << "nrFin del listado !!!n";
  218.    cout << "nr<<< ... PRESIONE ENTER para continuar >>>";
  219.    getch();
  220.    return;
  221. }
  222.  
  223. void BuscarxCodAlumno()
  224. {
  225.    char Codigo[9];
  226.    system("cls");
  227.    cout << "nrBUSCAR REGISTROS POR CODIGO DE ALUMNOS";
  228.    F = fopen("Alumnos.Sec","rb");
  229.    if(F == NULL)
  230.    {
  231.       cout << "nnnrNo existe el archivo !!!n";
  232.       cout << "nr<<< ... PRESIONE ENTER para continuar >>>";
  233.       getch();
  234.       return;
  235.    }
  236.  
  237.    cout << "nnnr Codigo ----> ";
  238.     //Codigo=LeerInt(15,5,8);
  239.    Leercod(Codigo,15,5);
  240.    fread(&Registro, sizeof(Registro), 1, F);
  241.  
  242.    while(!feof(F))
  243.    {
  244.       if(strcmp(Registro.Cod,Codigo)==0)
  245.       {
  246.         cout << "nr===============================================================================";
  247.             cout << "nr CODIGO         NOMBRES  Y  APELLIDOS             ESCUELA      PESO   CONDICION    ";
  248.         cout << "nr-------------------------------------------------------------------------------    ";
  249.          printf("nr%9st%-30st%8st%-6.1f%6it",Registro.Cod,Registro.Nombre, Registro.Escuela, Registro.Peso,Registro.Cond);
  250.          cout << "nr-------------------------------------------------------------------------------";
  251.          getch();
  252.          return;
  253.       }
  254.       fread(&Registro, sizeof(Registro), 1, F);
  255.    }
  256.    cout << "nrNo se encuentra ese registro !!!n";
  257.    fclose(F);
  258.    cout << "nr<<< ... PRESIONE ENTER para continuar >>>";
  259.    getch();
  260.    return;
  261. }
  262. void ActualizacionxCodAlumno()
  263. {
  264.  
  265.    char Codigo[9];
  266.    system("cls");
  267.  
  268.    cout << "nrACTUALIZAR REGISTROS POR CODIGO DE ALUMNOS";
  269.    F = fopen("Alumnos.Sec","rb+");
  270.    if(F == NULL)
  271.    {
  272.       cout << "nnnrNo existe el archivo !!!n";
  273.       cout << "nr<<< ... PRESIONE ENTER para continuar >>>";
  274.       getch();
  275.       return;
  276.    }
  277.  
  278.    cout << "nnnrCodigo ----> ";
  279.    //Codigo=LeerInt(14,5,8);
  280.    Leercod(Codigo,14,5);
  281.    fread(&Registro, sizeof(Registro), 1, F);
  282.  
  283.    while(!feof(F))
  284.    {
  285.       if(strcmp(Registro.Cod,Codigo)==0)
  286.       {
  287.  
  288.         cout << "nr===============================================================================";
  289.             cout << "nr CODIGO         NOMBRES  Y  APELLIDOS             ESCUELA      PESO   CONDICION    ";
  290.         cout << "nr-------------------------------------------------------------------------------    ";
  291.          printf("nr%9st%-30st%8st%-6.1f%6it",Registro.Cod,Registro.Nombre, Registro.Escuela, Registro.Peso,Registro.Cond);
  292.          cout << "nr-------------------------------------------------------------------------------";
  293.  
  294.          cout << "nnnrIngrese los nuevos datos ...";
  295.          cout << "nrEscuela ---> "; cin >> Registro.Escuela;
  296.          cout << "nrNombre ----> "; gets(Registro.Nombre);
  297.          cout << "nrPeso ------> "; cin >> Registro.Peso;
  298.          cout << "nrCondicion -> ";
  299.          Registro.Cond = LeerInt(14,24,1);
  300.          //cin >> Registro.Cond;
  301.  
  302.          fseek(F, ftell(F)-sizeof(Registro), SEEK_SET);
  303.          fwrite(&Registro, sizeof(Registro), 1, F);
  304.          fclose(F);
  305.          cout << "nnnrRegistro modificado !!!n";
  306.          cout << "nr<<< ... PRESIONE ENTER para continuar >>>";
  307.          getch();
  308.          return;
  309.       }
  310.       fread(&Registro, sizeof(Registro), 1, F);
  311.    }
  312.    cout << "nrNo se encuentra ese registro !!!n";
  313.    fclose(F);
  314.    cout << "nr<<< ... PRESIONE ENTER para continuar >>>";
  315.    getch();
  316.    return;
  317. }
  318. void EliminacionxCodAlumno()
  319. {
  320.  
  321.    char Codigo[9];
  322.    char op;
  323.    system("cls");
  324.  
  325.    cout << "nrELIMINACION LOGICA DE REGISTROS DE ALUMNOS";
  326.    F = fopen("Alumnos.Sec","rb+");
  327.    if(F == NULL)  // Checa la existencia del archivo
  328.    {
  329.       cout << "nnnrNo existe el archivo !!!n";
  330.       cout << "nr<<< ... PRESIONE ENTER para continuar >>>";
  331.       getch();
  332.       return;
  333.    }
  334.  
  335.    cout << "nnnrCodigo ----> ";
  336.    //Codigo=LeerInt(14,5,8);
  337.    Leercod(Codigo,14,5);
  338.    fread(&Registro, sizeof(Registro), 1, F);
  339.    while(!feof(F))
  340.    {
  341.       if(strcmp(Registro.Cod,Codigo)==0)
  342.       {
  343.          cout << "nr===============================================================================";
  344.             cout << "nr CODIGO         NOMBRES  Y  APELLIDOS             ESCUELA      PESO   CONDICION    ";
  345.         cout << "nr-------------------------------------------------------------------------------    ";
  346.          printf("nr%9st%-30st%8st%-6.1f%6it",Registro.Cod,Registro.Nombre, Registro.Escuela, Registro.Peso,Registro.Cond);
  347.          cout << "nr-------------------------------------------------------------------------------";
  348.  
  349.          strcpy(Registro.Cod,"");
  350.          strcpy(Registro.Nombre, "");
  351.          strcpy(Registro.Escuela, "");
  352.          Registro.Peso = 0.0;
  353.          Registro.Cond = 0.0;
  354.          do {
  355.             cout << "nnr¿... SEGURO que desea BORRARLO ...? [S/N] ---> ";
  356.             scanf("%s",&op);
  357.          }while(op!='S' && op!='N' && op!='s' && op!='n');
  358.  
  359.          if(op == 'S' || op == 's')
  360.          {
  361.             fseek(F, ftell(F)-sizeof(Registro), SEEK_SET);
  362.             fwrite(&Registro, sizeof(Registro), 1, F);
  363.             cout << "nnnrRegistro eliminado !!!n";
  364.          }
  365.          fclose(F);
  366.          cout << "nr<<< ... PRESIONE ENTER para continuar >>>";
  367.          getch();
  368.          return;
  369.       }
  370.       fread(&Registro, sizeof(Registro), 1, F);
  371.    }
  372.    cout << "nrNo se encuentra ese registro !!!n";
  373.    fclose(F); // Cierra el archivo
  374.    cout << "nr<<<  ... RESIONE ENTER para continuar >>>";
  375.    getch();
  376.    return;
  377. }
  378.  
  379. void EliminacionFisicaxCodAlumno()
  380. {
  381.    //Variable para controlar el archivo temporal
  382.    FILE *Temporal;
  383.    system("cls");
  384.  
  385.    cout << "nrELIMINACION FISICA DE REGISTROS DE ALUMNOS";
  386.    // Intenta abrir el archivo PRODUCTO.SEC en modo de solo lectura
  387.    F = fopen("Alumnos.Sec","rb");
  388.    // Valida la existencia del archivo
  389.    if(F == NULL)
  390.    {
  391.       cout << "nnnrNo existe el archivo !!!n";
  392.       cout << "nr<<< ... PRESIONE ENTER para continuar >>>";
  393.       getch();
  394.       return;
  395.    }
  396.    // Crea el archivo Temporal.Sec
  397.    Temporal = fopen("Temporal.Sec","wb");
  398.  
  399.    fread(&Registro, sizeof(Registro), 1, F);
  400.    while(!feof(F))
  401.    {
  402.       if(Registro.Cod != 0)
  403.       // Graba el registro valido en el archivo temporal
  404.       fwrite(&Registro, sizeof(Registro), 1, Temporal);
  405.       //Lee el siguinete elemento del archivo
  406.       fread(&Registro, sizeof(Registro), 1, F);
  407.    }
  408.    //fcloseall(); // Cierra todos los archivos abiertos
  409.    fclose(F);
  410.    fclose(Temporal);
  411.    remove("Alumnos.Sec"); //Elimina el archivo original
  412.    rename("Temporal.Sec", "Alumnos.Sec");
  413.    //Renombra el archivo temporal con el nombre del archivo original
  414.  
  415.    cout << "nnnrArchivo DEFRAGMENTADO ... !!!n";
  416.    cout << "nr<<< ... PRESIONE ENTER para continuar >>>";
  417.    getch();
  418.    return;
  419. }
  420.  
  421. /*****************************************************************************/
  422. //Funcion Valida enteros, compara cadenas bloquea el ingreso de char y enter,
  423. // intro, tabulador, etc medinate la funcion isdigit().
  424. /*****************************************************************************/
  425.  
  426. int ConvCadDig_Int(char *c)
  427. {  int dig,vacio=1,ii=0,pp=0;
  428.  
  429.    while(c[ii]!='')
  430.    {vacio=0;
  431.    switch(c[ii])
  432.    {    case '0':dig=0;break;
  433.     case '1':dig=1;break;
  434.     case '2':dig=2;break;
  435.       case '3':dig=3;break;
  436.       case '4':dig=4;break;
  437.         case '5':dig=5;break;
  438.       case '6':dig=6;break;
  439.       case '7':dig=7;break;
  440.       case '8':dig=8;break;
  441.       case '9':dig=9;break;
  442.    }
  443.    pp=pp*10+dig;ii++;
  444.    }
  445. if(vacio)
  446. {pp=-1;cprintf("Ingrese Entero No Nulo! <<CLICK>>");getch();
  447. }
  448. return (pp);
  449. }
  450.  
  451. int LeerCadDig(char *c,int x,int y,int tam)
  452. {char opc,esp=' ';
  453. int i;
  454. i=0;
  455.     do
  456.    {    gotoxy(x+i,y);
  457.         do
  458.     {opc=getch();
  459.     }while(!(isdigit(opc)||opc=='b'||opc=='r'||opc=='t'));
  460.  
  461.    if(opc=='b')
  462.    {  if(i==0)
  463.     {c[0]='';
  464.     }else
  465.       i--;
  466.       c[i]='';cout<<'b'<<esp;
  467.    }
  468.    else
  469.    {  if(opc!='r'&&opc!='t')
  470.     {
  471.  
  472.       c[i]=opc;
  473.       cprintf("%c",opc);
  474.       i++;
  475.       }else
  476.       c[i]='';
  477.  
  478.       if(i==tam)   //TAM min 1 TAM Max 9
  479.       {opc=getch();
  480.         if(opc=='b')
  481.     {   i--;c[i]='';cout<<'b'<<esp;
  482.     }
  483.     else
  484.       {c[i]='';opc='r';
  485.       }
  486.       }
  487.    }
  488.  
  489.    }while(!(opc=='r'||opc=='t'));
  490. //getch();
  491. return 0;
  492. }
  493.  
  494. int LeerInt(int x,int y,int tam)//en la posicion g(x,y) y de tamaño max. tam
  495. {   int p;
  496.     char cing[11],ccte[11]="999999999";
  497.     LeerCadDig(cing,x,y,tam);
  498.    if(strcmp(cing,ccte)<=0)
  499.     p=ConvCadDig_Int(cing);
  500.    else
  501.    p=-1;
  502.    cout << "n";
  503.     return (p);
  504. }
  505.  
  506. int Leernom(char c[50],int x,int y)
  507. {   int i;
  508.     char car;
  509.    for(i=0;i<50;i++)
  510.    {
  511.     if(i<50)
  512.       {
  513.         do{
  514.             gotoxy(x+i-1,y);
  515.             cout<<" ";
  516.             gotoxy(x+i-1,y);
  517.             car=getche();
  518.  
  519.             if(car==' ')
  520.             {
  521.             gotoxy(x+i+1,y);
  522.                 }
  523.             if(car=='r')
  524.             {
  525.               return 0;
  526.                 }
  527.  
  528.          }while((car<'A'||car>'Z')&& car!=' '&&car!='r');
  529.       }
  530.       c[i]=car;
  531.  
  532.    }
  533.    //Test del código
  534.    cout<<"tEste es el nombre: "<<c;
  535.     return 0;
  536. }
  537.  
  538. int Leercod(char c[9],int x,int y)
  539. {   int i;
  540.     char car;
  541.    for(i=0;i<=8;i++)
  542.    {
  543.     if(i<8)
  544.       {
  545.         do{
  546.             gotoxy(x+i-1,y);
  547.             cout<<" ";
  548.             gotoxy(x+i-1,y);
  549.             car=getche();
  550.          }while(car<'0'||car>'9');
  551.       }
  552.       else
  553.       {
  554.         do{
  555.             gotoxy(x+i-1,y);
  556.             cout<<" ";
  557.             gotoxy(x+i-1,y);
  558.             car=getche();
  559.          }while(car<'A'||car>'Z');
  560.       }
  561.       c[i]=car;
  562.    }
  563.    c[9]='';
  564.    //Test del código
  565.    //cout<<"nEste es el codigo: "<<c;
  566.     return 0;
  567. }
  568.  

//Como repito el problema está en la funcion o procedimiento lo que sea :)  que introduce datos y la que captura el codigo
 datos
« última modificación: Viernes 11 de Julio de 2008, 04:03 por cazador.asesino »

lostshell

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Re: Problemas con los registros
« Respuesta #5 en: Viernes 11 de Julio de 2008, 03:47 »
0
seria mucho pedir que uses los tags de codigo??, es mas facil leer el codigo, por lo tanto sera mas facil ayudar

cazador.asesino

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Problemas con los registros
« Respuesta #6 en: Viernes 11 de Julio de 2008, 04:00 »
0
Lo siento no se como-

lostshell

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Re: Problemas con los registros
« Respuesta #7 en: Viernes 11 de Julio de 2008, 04:26 »
0
hay un problema en la funcion 'Leercod', recuerda que los arrays empiezan desde 0 hasta n-1, en este caso n=9 , por lo tanto al maximo que debe de llegar es a c[n-1] (c[8]), al poner c[9] = '' estas ocasionando 1. desbordamiento de buffer, 2. que la variable c, sea una cadena sin fin, lo cual ocaciona que lea la siguiente parte de la memoria, que seria la variable nombre.

cazador.asesino

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Problemas con los registros
« Respuesta #8 en: Sábado 12 de Julio de 2008, 01:53 »
0
cout<<"Muchas gracias";//Me fue muy útil, en realidad eso lo solucionó B)