elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problemas de validacion, auxilio!!!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problemas de validacion, auxilio!!!  (Leído 2,529 veces)
larezaka

Desconectado Desconectado

Mensajes: 18


Ver Perfil
problemas de validacion, auxilio!!!
« en: 1 Junio 2012, 17:21 pm »

hola gente. soy nuevo en esto y la hago corta,tengo dos problemas de validacion en el sig codigo.
1-primero no me toma los precios Mayorista, Minorista, y Costo en DECIMALES al momento de ingresarlos, solo en INT. :-\
2- En Nombre Y Descripcion de producto, no me los toma con espacios ni alfanumericos.
soy un desastre!!

Código
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <string.h>
  4. #include <conio.h>
  5. #include <stdlib.h>
  6.  
  7. //los son para el primer menu
  8.  
  9. #define INGRESA_PRODU '1'
  10. #define MODIFICA_PRODU   '2'
  11. #define ELIMINA_PRODU '3'
  12. #define VISUALIZA_LISTA '4'
  13. #define MAYOR_DIFE '5'
  14. #define GENERA_TXT '6'
  15. #define MUESTRA_STOCK '7'
  16. #define SALIR '8'
  17.  
  18. //queda para el otro menu
  19.  
  20. #define POR_NOMB '1'
  21. #define POR_CODE   '2'
  22. #define SALIR_2MENU   '3'
  23.  
  24. //para la estructura en general
  25.  
  26. #define MAX_NOMB 20
  27. #define MAX_DESCRIP 50
  28. #define MAX_CODE  6
  29. #define MAX_STOCK 8
  30. #define MAX_PRECIO 8

La definicion de la estructura y sus parametros

Código
  1. struct producto{
  2. char nomb[MAX_NOMB+1];
  3.   char descrip[MAX_DESCRIP+1];
  4.   long code;
  5.   int stock;
  6. int pmayo;
  7.   int pmino;
  8.   int pcost;
  9. };
  10.  
  11. char menu_prodpri (void); //para el principal
  12. char menu_buscap (void);                     //es para la busqueda
  13.  
  14. int cargarint(int, int, int); //es para validar int
  15.  
  16. long buscar_nomb (char *, bool); //busco por nombre de producto
  17.  
  18. void ingresar_produ (void);     //es para el ingreso de productos
  19. void cargarstr(char *, int); //es para validar string
  20. void listado_produ (); //ver lista
  21. void mejor_dife (); //es para la diferencia del punto 5)
  22. void arch_texto (); //genera archivo de texto del punto6)
  23. void ver_stock (); //ve el stock en 0
  24. void modificar_produ (long);   //modifica el producto en el punto 2)
  25. void eliminar_produ (long);                   //elimina el producto en el punto 3)
  26.  
  27. long cargarlong(int, int, int); //es para validar long
  28.  
  29. bool IsAlphabetic (char *);   //para el alfabetico
  30. bool IsNumeric (char *);       //para el numero
  31. bool ExistenProductosEnArchivo (long);   //cuando alla cargado el codigo
  32. bool IngresarProductoOrdenado (producto);  
     

las condiciones del menu para las acciones

Código
  1. //void
  2. main ()
  3. {
  4.   char opcion, busqueda, nomb[MAX_NOMB+1], descrip[MAX_DESCRIP+1];
  5.   long code;
  6.   int flag;
  7.  
  8.   opcion = menu_prodpri ();
  9.  
  10.   while (opcion != SALIR)
  11.   {
  12.   switch (opcion)
  13.      {
  14.       case INGRESA_PRODU:
  15.         ingresar_produ ();
  16.            break;
  17.       case MODIFICA_PRODU:
  18.            //clrscr ();
  19. busqueda = menu_buscap();
  20. while (busqueda != SALIR_2MENU)
  21. {
  22.               flag = 0;
  23. switch (busqueda)
  24.             {
  25.             case POR_NOMB:
  26.                   printf ("\nINGRESE EL NOMBRE DEL PRODUCTO: ");
  27.                     cargarstr(nomb, MAX_NOMB);
  28.                     code = buscar_nomb (nomb, true);
  29.                     if (code == 0)
  30.                     printf ("\nNo se encontro ningun producto con ese nombre\n");
  31. else
  32.                     modificar_produ (code);
  33.                     break;
  34.               case POR_CODE:
  35.                   printf ("\nINGRESE EL CODIGO DEL PRODUCTO: ");
  36.             code = cargarlong(MAX_CODE, 999999, 1);
  37. modificar_produ (code);
  38.                     break;
  39.               default:
  40.                   flag = 1;
  41.     break;
  42.               }
  43.  
  44.               if(flag == 1)
  45.               {
  46.               printf ("Opcion invalida\n");
  47. printf ("\nPresione ENTER para continuar\n");
  48.     getch ();
  49. busqueda = menu_buscap();
  50.               }
  51.               else
  52.               break;
  53. }
  54.            break;
  55.       case ELIMINA_PRODU:
  56.         //clrscr ();
  57. busqueda = menu_buscap();
  58.  
  59.            while (busqueda != SALIR_2MENU)
  60. {
  61.               flag = 0;
  62.  
  63.             switch (busqueda)
  64.             {
  65.             case POR_NOMB:
  66.                   printf ("\nINGRESE EL NOMBRE DEL PRODUCTO: ");
  67.                     cargarstr(nomb, MAX_NOMB);
  68.                     code = buscar_nomb (nomb, true);
  69.                     if (code == 0)
  70.                     printf ("\nNo se encontro ningun producto con ese nombre\n");
  71. else
  72.                     eliminar_produ (code);
  73.                     break;
  74.               case POR_CODE:
  75.                   printf ("\nINGRESE EL CODIGO DEL PRODUCTO: ");
  76.             code = cargarlong(MAX_CODE, 999999, 1);
  77. eliminar_produ (code);
  78.                     break;
  79.               default:
  80.                   flag = 1;
  81.     break;
  82.               }
  83.  
  84.               if(flag == 1)
  85.               {
  86.               printf ("Opcion invalida\n");
  87. printf ("\nPresione ENTER para continuar\n");
  88.     getch ();
  89. busqueda = menu_buscap();
  90.               }
  91.               else
  92.               break;
  93. }
  94.            break;
  95.       case VISUALIZA_LISTA:
  96.            listado_produ ();
  97.         break;
  98.       case MAYOR_DIFE:
  99.         mejor_dife ();
  100.         break;
  101.       case GENERA_TXT:
  102.         arch_texto ();
  103.         break;
  104.       case MUESTRA_STOCK:
  105.            ver_stock ();
  106.         break;
  107.       default:
  108.         printf ("Opcion invalida\n");
  109.            break;
  110.      }
  111.  
  112.      printf ("\nPresione ENTER para continuar\n");
  113.     getch ();
  114. opcion = menu_prodpri ();
  115.   }
  116.  
  117.   printf ("\nPrograma creado por JORGE MIRANDA");
  118.   printf ("\nFinalizado Exitosamente...");
  119.   getch ();
  120. }

lo que se aplico para definir que es numerico y alfanumerico

Código
  1. bool
  2. IsAlphabetic (char *s)
  3. {
  4. while (*s)
  5.   if (!isalpha (*s++))
  6.       return false;
  7.  
  8.   return true;
  9. }
  10.  
  11. bool
  12. IsNumeric (char *s)
  13. {
  14. while (*s)
  15.   if (!isdigit (*s++))
  16.       return false;
  17.  
  18.   return true;
  19. }

opciones del menu

Código
  1. char
  2. menu_prodpri ()
  3. {
  4.   char auxvec [50];
  5.  
  6.   //clrscr ();
  7.  
  8. printf ("MENU PRINCIPAL DE OPCIONES\n");
  9. printf ("1 - INGRESO DE PRODUCTO\n");
  10. printf ("2 - MODIFICACION DE PRODUCTO\n");
  11. printf ("3 - ELIMINACION DE PRODUCTO\n");
  12. printf ("4 - VISUALIZACION DEL LISTADO DE PRODUCTOS COMPLETO Y DETALLADO\n");
  13. printf ("5 - DIFERENCIA MAS ALTA ENTRE PRECIO MAYORISTA Y PRECIO MINOROSTA\n");
  14. printf ("6 - GENERACION DE ARCHIVO ADICIONAL CON LOS PRODUCTOS QUE NO TENGAN STOCK\n");
  15. printf ("7 - VER LISTADO DE PRODUCTOS SIN STOCK\n");
  16. printf ("8 - Salir\n");
  17.  
  18.   printf ("\nIngrese la opcion: ");
  19.   gets (auxvec);
  20.  
  21.   if (strlen(auxvec)!=1) //cant caracteres
  22.   return '0';
  23.  
  24.   return auxvec [0];
  25. }

para el segundo menu

Código
  1. char
  2. menu_buscap ()
  3. {
  4.   char auxvec [50];
  5.  
  6.   //clrscr ();
  7.  
  8. printf ("1 - elegir PRODUCTO por NOMBRE\n");
  9. printf ("2 - elegir PRODUCTO por CODIGO\n");
  10. printf ("3 - Salir\n");
  11.  
  12.   printf ("\nIngrese la opcion: ");
  13.   gets (auxvec);
  14.  
  15.   if (strlen(auxvec)!=1)
  16.   return '0';
  17.  
  18.   return auxvec [0];
  19. }

bool
ExistenProductosEnArchivo (long code)
{
   FILE * arch;
   int cant;
   struct producto produ;
   bool encontrado;

   if((arch=fopen("producto.dat","rb+"))==NULL)
   {
      if((arch=fopen("producto.dat","wb+"))==NULL)
      {
         printf("\nNo se puede abrir el archivo");
         return false;
      }
     }

   rewind (arch);
   encontrado = false;
   while (!feof(arch))
   {
      cant = fread (&produ, sizeof(produ), 1, arch);

      if ( cant != 1 )
      {
         if (!feof (arch))
            printf("Error al leer el ultimo registro\n");
         break;
      }

      if(produ.code == code)
      {
         encontrado = true;
         break;
      }
   }

   fclose (arch);

   return encontrado;
}

bool
IngresarProductoOrdenado (producto produnuevo)
{
   int cant;
   FILE *arch, *temp;
   bool productoNoIngresado;
   struct producto produ;

   if((arch=fopen("c:\\tp\\producto.dat","rb+"))==NULL)
   {
      if((arch=fopen("c:\\tp\\producto.dat","wb+"))==NULL)
      {
         printf("\nNo se puede abrir el archivo");
         return false;
      }
     }
     if((temp=fopen("c:\\tp\\temporal.dat","wb"))==NULL)
   {
      printf("\nNo se puede abrir el archivo");
        fclose (arch);
       return false;
    }

   productoNoIngresado = true;
   while (!feof(arch))
   {
        cant = fread (&produ, sizeof(produ), 1, arch);

      if ( cant != 1 )
      {
         if (!feof (arch))
            printf("Error leyendo ultimo registro\n");
         break;
      }

        if (productoNoIngresado && produ.code>produnuevo.code)
      {
           fwrite(&produnuevo, sizeof(produnuevo), 1, temp);
         productoNoIngresado=false;
      }

      fwrite(&produ, sizeof(produ), 1, temp);
   }

   if (productoNoIngresado)
       fwrite(&produnuevo, sizeof(produnuevo), 1, temp);

   fclose (temp);
   fclose (arch);

   if( remove( "c:\\tp\\producto.dat" ) != 0 )
      printf ( "Error borrando producto.dat" );

   if ( rename ("c:\\tp\\temporal.dat", "c:\\tp\\producto.dat") != 0 )
      printf ( "Error renombrando temporal.dat a producto.dat" );

   return true;
}

aca es el ingreso de los datos!!

Código
  1. void
  2. ingresar_produ (void)
  3. {
  4. struct producto aux;
  5. char rta='s';
  6.  
  7.   //clrscr ();
  8.  
  9. while(rta=='s')
  10. {
  11.  
  12.   printf("\nINGRESE EL CODIGO DEL PRODUCTO: ");
  13.      aux.code = cargarlong(MAX_CODE, 999999, 1);
  14.  
  15.      // Vemos si ya fue ingresado.
  16.      if ( !ExistenProductosEnArchivo (aux.code) )
  17.      {
  18.  
  19. printf("\nINGRESE NOMBRE DEL PRODUCTO: ");
  20. cargarstr(aux.nomb, MAX_NOMB);
  21.     printf("\nINGRESE LA DESCRIPCION DEL PRODUCTO: ");
  22.     cargarstr(aux.descrip, MAX_DESCRIP);
  23.     printf("\nINGRESE LA CANTIDAD DISPONIBLE DEL PRODUCTO: ");
  24.      aux.stock = cargarint(MAX_STOCK, 99999999, 0);
  25. printf("\nINGRESE EL PRECIO MAYORISTA: ");
  26. aux.pmayo = cargarint(MAX_PRECIO, 99999999, 0);
  27.      printf("\nINGRESE EL PRECIO MINORISTA: ");
  28. aux.pmino = cargarint(MAX_PRECIO, 99999999, 0);
  29.       printf("\nINGRESE EL PRECIO DE COSTO: ");
  30. aux.pcost = cargarint(MAX_PRECIO, 99999999, 0);
  31.  
  32.         // Se guarda el produ en el archivo.
  33.         if (!IngresarProductoOrdenado (aux))
  34.         printf ("\nError, el nuevo producto no pudo ser insertado\n");
  35.      }
  36.      else
  37.       printf ("\nESTE CODIGO YA FUE INGRESADO!!\n");
  38.  
  39. printf("\nDesea ingresar otro PRODUCTO?[s/n] ");
  40. scanf("%c",&rta);
  41. fflush(stdin);
  42.      tolower(rta);
  43.      //clrscr ();
  44. }
  45.  
  46.   printf ("\nIngreso de productos terminado\n");
  47. }



void
listado_produ ()
{
    struct producto produ;
   int cant, flag=0;
   FILE *arch;

   if((arch=fopen("c:\\tp\\producto.dat","rb+"))==NULL)
   {
      printf("\nNo se puede abrir el archivo, proceda primero a la carga de los productos");
      return;
   }

   //clrscr ();

   while(!feof(arch))
   {
      cant = fread (&produ, sizeof(produ), 1, arch);

      if ( cant != 1 )
      {
         if (!feof (arch))
            printf("Error leyendo ultimo registro\n");
         break;
      }

      if (flag==0)
      {
         printf("*******************   PRODUCTOS  ********************\n\n");
         printf("\nNombre    \t\tDescripcion\tCodigo\tStock\tMayorista\tMinorista\tCosto\n\n");
         flag = 1;
      }

      printf ("%-15s%-15s %8ld %9d $:%7d %7d %7d\n",
               produ.nomb, produ.descrip, produ.code, produ.stock,
               produ.pmayo, produ.pmino, produ.pcost);
   }

   fclose (arch);
}

void
mejor_dife ()
{
    struct producto produ;
   int dife, dife_mayor = 0;
   int cant, flag = 0;
   FILE *arch; //para abrir el archivo

   if((arch=fopen("c:\\tp\\producto.dat","rb+"))==NULL)
   {
      printf("\nNo se puede abrir el archivo, proceda primero a la carga de los productos");
      return;
   }

   //clrscr ();

   while(!feof(arch))
   {
      cant = fread (&produ, sizeof(produ), 1, arch);

      if ( cant != 1 )
      {
         if (!feof (arch))
            printf("Error leyendo ultimo registro\n");
         break;
      }
      dife = (produ.pmino-produ.pmayo);
     

      if (dife > dife_mayor)
         dife_mayor = dife;
   }

   rewind(arch);

   while (!feof(arch))
   {
      if (flag==0)
      {
         printf("***********************   diferencias  *********************\n\n");
         printf("\nNombre\tDescripcion\tCodigo\tDiferencia\n\n");
         flag = 1;
      }

      cant = fread (&produ, sizeof(produ), 1, arch);

      if ( cant != 1 )
      {
         if (!feof (arch))
            printf("Error leyendo ultimo registro\n");
         break;
      }
     dife = (produ.pmino-produ.pmayo);
     

      if (dife == dife_mayor)
         printf ("%-15s %-15s %8ld %12.2d\n", produ.nomb, produ.descrip, produ.code, dife);
   }

   fclose (arch);
}

void
arch_texto ()
{
   int flag = 0, cant;
    struct producto produ;
   FILE *arch, *txt;
   char buff [200]; //buffer para guardar caracteres

   if((arch=fopen("c:\\tp\\producto.dat","rb+"))==NULL)
   {
      printf("\nNo se puede abrir el archivo, proceda primero a la carga de los productos");
      return;
   }

   if((txt=fopen("c:\\tp\\producto_sin_stock.txt","w"))==NULL)
   {
      printf("\nNo se puede abrir el archivo");
      return;
   }

   //clrscr ();

   while(!feof(arch))
   {
      cant = fread (&produ, sizeof(produ), 1, arch);

      if ( cant != 1 )
      {
         if (!feof (arch))
            printf("Error leyendo ultimo registro\n");
         break;
      }
     
      if(produ.stock==0)

      {
         if (flag==0)
         {
            sprintf(buff, "*****************   sin stock   ******************\n\n"
                          "\nNombre\tDescripcion\tCodigo\tStock\n\n");

            if (fwrite(buff, strlen (buff), 1, txt)!= 1)
               printf ("\nERROR, no se pudo generar el archivo de texto\n");

            flag = 1;
         }

         sprintf (buff, "%-15s %-15s %8ld %9d\n",
                  produ.nomb, produ.descrip, produ.code, produ.stock);

         if (fwrite(buff, strlen (buff), 1, txt)!= 1)
            printf ("\nERROR, no se pudo generar el archivo de texto\n");
      }
   }

   printf ("\nSe genero un archivo adicional de texto con los productos sin stock\n");

   fclose (txt);
   fclose (arch);
}


void
ver_stock ()
{
    struct producto produ;
   int cant, flag = 0;
   FILE *arch;

   if((arch=fopen("c:\\tp\\producto.dat","rb+"))==NULL)
   {
      printf("\nNo se puede abrir el archivo, proceda primero a la carga de los productos");
      return;
   }

   //clrscr ();

   while(!feof(arch))
   {
      cant = fread (&produ, sizeof(produ), 1, arch);

      if ( cant != 1 )
      {
         if (!feof (arch))
            printf("Error leyendo ultimo registro\n");
         break;
      }

      if (produ.stock==0)
      {
         if (flag==0)
         {
            printf("   ****************   sin stock   *****************    \n\n");
            printf("\nNombre\t\t\t    Descripcion\t     Codigo\t      \tStock\n\n");
            flag = 1;
         }
         
         printf ( "%-15s %-15s %8ld %9d\n",
                  produ.nomb, produ.descrip, produ.code, produ.stock);

      }
   }

   fclose (arch);
}


long
buscar_nomb (char *str, bool BuscoporNombre)
{
   int cant, flag=0, cnt=0, norden;
   struct producto produ;
   FILE *arch;
   bool resultado;
   long code=0;

   //clrscr ();

   if((arch=fopen("c:\\tp\\producto.dat","rb"))==NULL)
   {
      printf("\nNo se puede abrir el archivo, proceda primero a la carga de los productos");
      return 0;
   }

   while (!feof (arch))
   {
      cant = fread (&produ, sizeof(produ), 1, arch);

      if ( cant != 1 )
      {
         if (!feof (arch))
            printf("Error leyendo ultimo registro\n");
         break;
      }

      if (BuscoporNombre)
         resultado = strcmp (produ.nomb, str);
      else
         resultado = strcmp (produ.descrip, str);

      if (resultado == 0)
      {
         if (flag == 0)
         {
            printf ("DATOS DEL PRODUCTO:\n\n"
                     "NRO Producto  Descripcion  Codigo  Cantidad  Mayorista  Minorista  Costo\n");
            flag = 1;
         }

         cnt++;
         printf ("%-3d %-15s %-15s %8ld %5d %5d %5d %5d\n", cnt,
                  produ.nomb, produ.descrip, produ.code, produ.stock,
               produ.pmayo, produ.pmino, produ.pcost);

         code = produ.code;
      }
   }

   if (cnt>1)
   {
      printf ("\nIngrese el producto elegido por nro de orden (1 a %d): ", cnt);
      norden = cargarint (5, cnt, 1);

      rewind (arch);
      cnt = 0;

      while (!feof (arch))
      {
         cant = fread (&produ, sizeof(produ), 1, arch);

         if ( cant != 1 )
         {
            if (!feof (arch))
               printf("Error leyendo ultimo registro\n");
            break;
         }

         if (BuscoporNombre)
            resultado = strcmp (produ.nomb, str);
         else
            resultado = strcmp (produ.descrip, str);

         if (resultado == 0)
         {
            cnt++;
            if (cnt == norden)
            {
               code=produ.code;
               break;
            }
          }
      }
   }

   fclose (arch);
   return code;
}

void
modificar_produ (long code)
{
   int cant, flag=0;
   struct producto produ;
   FILE *arch;

   //clrscr ();

   if((arch=fopen("c:\\tp\\producto.dat","rb+"))==NULL)
   {
      printf("\nNo se puede abrir el archivo, proceda primero a la carga de los producto");
      return;
   }

   while (!feof (arch))
   {
      cant = fread (&produ, sizeof(produ), 1, arch);

      if ( cant != 1 )
      {
         if (!feof (arch))
            printf("Error leyendo ultimo registro\n");
         break;
      }

      if (produ.code == code)
      {
         flag=1;

         printf ("DATOS DEL PRODUCTO:\n\nNombreE\tDescripcion\tCodigo\tCantidad\tMayorista\tMinorista\tCosto\n");
         printf ("%-15s %-15s %8ld %9d %7d %7d %7d\n", produ.nomb, produ.descrip, produ.code, produ.stock,
               produ.pmayo, produ.pmino, produ.pcost);

         // Actualizamos los datos del producto.
         printf("\nINGRESE EL NUEVO NOMBRE DEL PRODUCTO: ");
         cargarstr(produ.nomb, MAX_NOMB);
         printf("\nINGRESE LA NUEVA DESCRIPCION: ");
            cargarstr(produ.descrip, MAX_DESCRIP);
         printf("\nINGRSEE LA NUEVA CANTIDAD: ");
         produ.stock = cargarint(MAX_STOCK, 99999999, 0);
         printf("\nINGRESE EL NUEVO PRECIO MAYORISTA: ");
         produ.pmayo = cargarint(MAX_PRECIO, 99999999, 0);
         printf("\nINGRESE EL NUEVO PRECIO MINORISTA: ");
         produ.pmino = cargarint(MAX_PRECIO, 99999999, 0);
         printf("\nINGRESE EL NUEVO PRECIO DE COSTO: ");
         produ.pcost = cargarint(MAX_PRECIO, 99999999, 0);

         fseek (arch, (long)(-1)*sizeof(produ), SEEK_CUR);
         if (fwrite(&produ, sizeof(produ), 1, arch)!= 1)
            printf ("\nERROR, no se pudo actualizar el producto en el archivo\n");
         else
            //clrscr();
            printf ("Producto actualizado ... \n\nNomnre\tDescripcion\tCodigo\tCantidad\tMayorista\tMinorista\tCosto\n");
            printf ("%-15s %-15s %8ld %9d %7d %7d %7d\n", produ.nomb, produ.descrip, produ.code, produ.stock,
               produ.pmayo, produ.pmino, produ.pcost);
         break;
      }
   }

   if (flag==0)
      printf ("\nNo se encontro ningun producto con el codigo indicado\n");

   fclose (arch);
}

void
eliminar_produ (long code)
{
   int cant, flag=0;
   struct producto produ;
   FILE *arch, *temp;

   //clrscr ();

   if((arch=fopen("c:\\tp\\producto.dat","rb"))==NULL)
   {
      printf("\nNo se puede abrir el archivo, proceda primero a la carga de los producto");
      return;
   }

   if((temp=fopen("c:\\tp\\temporal.dat","wb"))==NULL)
   {
      printf("\nNo se puede abrir el archivo");
      return;
   }

   while (!feof (arch))
   {
      cant = fread (&produ, sizeof(produ), 1, arch);

      if ( cant != 1 )
      {
         if (!feof (arch))
            printf("Error leyendo ultimo registro\n");
         break;
      }

      if (produ.code != code)
         fwrite(&produ, sizeof(produ), 1, temp);
      else
         flag=1;
   }

   if (flag==0)
      printf ("\nNo se encontro ningun prodcuto con el codigo indicado\n");
   else
      printf ("\nSe elimino el producto correctamente...\n");

   fclose (temp);
   fclose (arch);

   if( remove( "c:\\tp\\producto.dat" ) != 0 )
      printf ( "Error borrando producto.dat" );

   if ( rename ("c:\\tp\\temporal.dat", "c:\\tp\\producto.dat") != 0)
      printf ( "Error renombrando temporal.dat a producto.dat" );
}

por ultimo las funciones para el tipo de datos a ingresar

Código
  1. void
  2. cargarstr(char *str, int max)   //Funcion validar string
  3. {
  4.   int flag=0, len;
  5. char auxvec[50];
  6.  
  7. gets(auxvec);
  8.  
  9. while(flag==0)
  10. {
  11.         len=strlen(auxvec);
  12.  
  13.         if (len==0 || len>max || len<1 || !IsAlphabetic (auxvec))
  14.         {
  15.         printf ("Error, vuelva a ingresar el dato: ");
  16. gets(auxvec);
  17.         }
  18.         else
  19.         flag = 1;
  20. }
  21.  
  22. strcpy(str,auxvec);
  23. }
  24.  
  25. long
  26. cargarlong (int cant, int max, int min) //Funcion validar long
  27. {
  28.   int flag=0, len;
  29.   long number;
  30. char auxvec[50];
  31.  
  32. gets(auxvec);
  33.  
  34. while(flag==0)
  35. {
  36.   number = atol (auxvec);
  37.      len = strlen (auxvec);
  38.  
  39.      if (!IsNumeric (auxvec) || len>cant || number<min ||number>max)
  40.      {
  41.       printf ("Error, vuelva a ingresar el dato: ");
  42.         gets(auxvec);
  43.      }
  44.      else
  45.       flag = 1;
  46. }
  47.  
  48. return (number);
  49. }
  50.  
  51. int
  52. cargarint (int cant, int max, int min)   //Funcion validar int
  53. {
  54.   int flag=0, len, number;
  55. char auxvec[50];
  56.  
  57. gets(auxvec);
  58.  
  59. while(flag==0)
  60. {
  61.   number = atoi (auxvec);
  62.      len = strlen (auxvec);
  63.  
  64.      if (!IsNumeric (auxvec) || len>cant || number<min ||number>max)
  65.      {
  66.       printf ("Error, vuelva a ingresar el dato: ");
  67.         gets(auxvec);
  68.      }
  69.      else
  70.       flag = 1;
  71. }
  72.  
  73. return (number);
  74. }


hay esta el cod, y lo que costo, consulte y todo, nadie me dice que tiene.

lo principal es el ingreso de los datos, como dije, que los precios sean  en decimal y con espacios en el nombre y la descripcion, el resto lo modifico a la marcha y de corregir lo anterioro no seria complicado

gracias Camaradas!!!


« Última modificación: 2 Junio 2012, 20:21 pm por larezaka » En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: problemas de validacion, auxilio!!!
« Respuesta #1 en: 2 Junio 2012, 02:46 am »

que es este desorden ¬¬
te compila el codigo? sino lo hace mostra la linea del error, si el codigo compila y hay un error en tiempo de ejecucion depura el codigo o mostra en que linea


En línea

Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: problemas de validacion, auxilio!!!
« Respuesta #2 en: 2 Junio 2012, 02:56 am »

Posteá el código entre etiquetas GeSHi. Esto es ilegible.
En línea

flony


Desconectado Desconectado

Mensajes: 583



Ver Perfil
Re: problemas de validacion, auxilio!!!
« Respuesta #3 en: 2 Junio 2012, 04:08 am »

en la parte de
Código:
struct producto{
   char nomb[MAX_NOMB+1];
   char descrip[MAX_DESCRIP+1];
   long code;
   int stock;
   int pmayo;
   int pmino;
   int pcost;
los definís como enteros allí deberían ser float, por eso salen como enteros...
ejemplo
Código:
float  pmayo;
o mejor aun
Código:
double pmayo;
2°lo de los espacios y alfanumericos  lo arreglas poniendo
Código:
char nomb[50];
alcanzaria para meter un nombre de 50 caracteres...eso si no se bien para que metiste la parte de
Código:
#define MAX_NOMB 20
Seguramente esos pequeños cambios generaran cambios en el resto del código..la verdad no lo leí, pero eres tu el que lo conoce así que búscalos...cualquier cosa avisa
« Última modificación: 2 Junio 2012, 04:36 am por flony » En línea

si un problema no tiene solucion entonces no es un problema...es algo inevitable
larezaka

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: problemas de validacion, auxilio!!!
« Respuesta #4 en: 2 Junio 2012, 05:43 am »

Gracias por las aclaraciones, el programa compila a la perfeccion, el error principal esta en la validaciones que mencione.

Se que me precipite al subirlo de esta manera, mi intencion era que lo prueben y juzguen el funcionamiento, lo sigo probando.

y Flony me sirvio lo que me dijiste, sigo modificandolo para ver si con los parametros que me pediste sujeriste me funcionan bien las validaciones.

Repito, Gracias por los comentarios, no soy experto pero me ayudan!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Auxilio!! problemas con 2Wire
Hacking Wireless
charlypisfil 1 3,486 Último mensaje 20 Agosto 2011, 08:57 am
por Sh4k4
AUXILIO ASUNTO GRAVE!!! « 1 2 3 4 »
Foro Libre
anonimo12 34 9,984 Último mensaje 20 Febrero 2021, 03:51 am
por MCKSys Argentina
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines