Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Carlosj1 en 24 Julio 2019, 06:41 am



Título: scanf C - borland
Publicado por: Carlosj1 en 24 Julio 2019, 06:41 am
Como puedo hacer para que en vez de que el usuario ingrese el número del case, directamente le léa la número precionado?
Es decir, que en vez de escribir el número y darle enter, al precionar el número directamente valla a el case presionado


Título: Re: scanf C - borland
Publicado por: @XSStringManolo en 24 Julio 2019, 08:37 am
Yo lo hago con hooks en windows api (windows.h) o keyevents en sdl según la plataforma. En linux creo que también se puede hacer con raw. También vi hace tiempo cuanto estaba haciendo un keylogger mucho código usando eof, pero es una basura, no pilla todas las pulsaciones.



Título: Re: scanf C - borland
Publicado por: Carlosj1 en 24 Julio 2019, 20:26 pm
Ya hice lo que quería con la ayuda que no me diste, ahora la cosa es que mi inventario pueda modificar un artículo con espacio
Es decir, al crear un articulo, puede guardarmelo con el caracter espacio, pero al modificar el artículo que tiene espacio, no me lo lee, solo me lee la parte antes del espacio, al igual que eliminar

Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <windows>
  6. FILE *fp;
  7. FILE *fp1;
  8. struct inven{
  9.  char codigo[80];
  10.  char nombre[80];
  11.  char descrip[80];
  12.  char precio[85];
  13. }inventario;
  14.  
  15. //  ===  funciones ===
  16. void crear();
  17. void consultar();
  18. void modificar();
  19. void eliminar();
  20.  
  21.  
  22.  
  23. // ----------------PROGRAMA PRINCIPAL ----------------------------
  24. void main()
  25. {
  26.  
  27.  char resp;
  28.  
  29.  do
  30.  {
  31.    system("cls");
  32.    printf("\n\n\t\t\t* * * * * INVENTARIO * * * * *");
  33.    printf("\n\t\t---------------------------------------------------");
  34.    printf("\n\t\t\t      ALTA Y CONTROL DE PRODUCTOS   ");
  35.    printf("\n\t\t-------------------------------------------------\n\n\n\n");
  36.    printf("\t\t\t\t (1) Agregar  \n");
  37.    printf("\t\t\t\t (2) Consultar     \n");
  38.    printf("\t\t\t\t (3) Modificar             \n");
  39.    printf("\t\t\t\t (4) Eliminar              \n");
  40.    printf("\t\t\t\t (5) Salir         ");
  41.    printf("\n\n\t\t\t\tSeleccione una opci%cn: ",162);
  42.    resp=getch();
  43.    switch(resp)
  44. {
  45.  case '1': crear();
  46. break;
  47.  case '2': consultar();
  48. break;
  49.  case '3': modificar();
  50. break;
  51.  case '4': eliminar();
  52. break;
  53.  case '5' : exit(1);
  54.    }
  55.  }
  56.  while(resp!='6');
  57.  getch();
  58. }
  59. // === Funcion de crear un archivo/nuevo articulo ====
  60. void crear()
  61. {
  62.   system("cls");
  63.   char opcion = 's';
  64.   int i=0;
  65.   if ((fp=fopen("inventario.dat","ab"))==NULL)
  66.      printf("\n\n\n\n\t\t< < < Error de apertura de archivo inventario.dat   > > >");
  67.   else
  68.   {
  69.     while(opcion == 's'){
  70.        printf("\n\n Escriba el c%cdigo del producto que desea registrar (NO EXEDER DE 16 DIGITOS): ",162);
  71.        scanf("%[^\n]",&inventario.codigo);
  72.        fflush(stdin);
  73.        printf("\n\n Escriba el nombre del producto ");
  74.        scanf("%[^\n]", &inventario.nombre);
  75.        fflush(stdin);
  76.        printf("\n\n Escriba la descripci%cn del producto: ",162);
  77.        scanf("%[^\n]", &inventario.descrip);
  78.        fflush(stdin);
  79.        printf("\n\n Escriba el precio del producto: ");
  80.        scanf("%[^\n]",&inventario.precio);
  81.        fflush(stdin);
  82.        fwrite(&inventario, sizeof(inventario), 1, fp);
  83.        printf("\n\n\n\t\t Desea registrar otro producto? [s/n]: ");
  84.     scanf("%[^\n]",&opcion);
  85.        system("cls");
  86.         }
  87.         }
  88.         fclose(fp);
  89. }
  90.  
  91. //=================MODIFICAR
  92.  
  93. void modificar(){
  94. system("cls");
  95.      int opc,i=0;
  96.      char elim[66];
  97.      printf("\nIngrese el c%cdigo del producto que desea modificar: ",162);
  98.      scanf("%s",&elim);
  99.      fp=fopen("inventario.dat","r+b");
  100.  
  101. if(!fp)
  102.         printf("\n Error de apertura del archivo %cinventario.dat%c\n",34,34);
  103.      else{
  104.         while (((fread(&inventario, sizeof(inventario), 1, fp))!=0)&&i!=1){
  105.            if(!strcmp(inventario.codigo,elim)){
  106.  
  107.                printf("\n\nC%cdigo: %s\n",162,inventario.codigo);
  108.                printf("Nombre: %s\n",inventario.nombre);
  109.                printf("Descripci%cn: %s\n",162,inventario.descrip);
  110.                printf("Precio: %s\n",inventario.precio);
  111.  
  112.               printf ("\n %cQu%c desea modificar? ",168,130);
  113.               printf ("\n\n(1) C%cdigo\n",162);
  114.               printf("(2) Nombre\n");
  115.               printf ("(3) Descripci%cn\n",162);
  116.               printf("(4) Precio\n");
  117.               printf("(5) Salir\n");
  118.               printf("\nEscriba una opci%cn: ",162);
  119.               scanf("%d",&opc);
  120.  
  121.               switch (opc){
  122.                case 1:
  123.                  printf ("\nIngrese el nuevo C%cdigo: ",162);
  124.                  scanf("%s", &inventario.codigo);
  125.                  break;
  126.                case 2:
  127.                  printf ("\nIngrese el nuevo nombre: ");
  128.                  scanf("%s",&inventario.nombre);
  129.                  break;
  130.                case 3:
  131.                  printf ("\nIngrese la nueva descripci%cn: ",162);
  132.                    scanf("%s",&inventario.descrip);
  133.                  break;
  134.                case 4:
  135.                  printf ("\nIngrese el nuevo precio: ");
  136.                  scanf("%s",&inventario.precio);
  137.                  break;
  138.               }
  139.             fseek(fp,-sizeof(inventario),SEEK_CUR);
  140.             fwrite(&inventario,sizeof(inventario), 1, fp);
  141.             i=1;
  142.             fclose(fp);
  143.            }
  144.         }
  145.  
  146.      }
  147. }
  148. ///=======================================eliminar producto
  149. void eliminar()
  150.               {
  151.               char elim[70];
  152.               system("cls");
  153.       printf("\nIngrese el c%cdigo del producto que desea eliminar eliminar: ",162);
  154.         scanf("%s",&elim);
  155.                     fp=fopen("inventario.dat","r+b");
  156.                     fp1=fopen("inventario1.dat","wb");
  157.           if(!fp)
  158.   printf("\n Error de apertura del archivo inventario.dat\n");
  159.   else{
  160.         while (((fread(&inventario, sizeof(inventario), 1, fp))!=0)&&(inventario.codigo!=0)){
  161.                              if(strcmp(inventario.codigo,elim)){
  162.                                 fseek(fp1,sizeof(inventario),SEEK_END);
  163.                                 fseek(fp1,-sizeof(inventario),SEEK_CUR);
  164.                                 fwrite(&inventario,sizeof(inventario), 1, fp1);
  165.                        fclose(fp1);
  166.                                 fp1=fopen("inventario1.dat","r+b");
  167.                                 system("cls");
  168.                             printf ("\n\n\n\n\n\n\n\n\n\n\nEl producto se ha eliminado correctamente \n");
  169.                                 Sleep(500);
  170.                                 }
  171.  
  172.                           }
  173.                        fclose(fp);
  174.                     fclose(fp1);
  175.                        system("del inventario.dat");
  176.                        system("ren inventario1.dat inventario.dat");
  177.  
  178.                       }
  179.         }
  180. //// ====================================Consulta de productos//////////
  181. void consultar (){
  182.  
  183. int i;
  184. system("cls");
  185. FILE *invent;
  186. invent = fopen("inventario.dat", "r");
  187. if(invent == NULL)
  188. {
  189. printf("\nNo existe archivo inventario.dat");
  190. }
  191.       fread(&inventario, sizeof(struct inven), 1, invent);
  192.     printf("------------------------------------------------------------------\n");
  193.        printf("C%CDIGO   NOMBRE\t\tDESCRIPCI%cN\tPRECIO  \n",224,224);
  194.                       printf("------------------------------------------------------------------\n");
  195. while(!feof(invent)) //mientras no sea fin de archivo
  196. {
  197.      gotoxy(2,i);
  198.  printf("  %s      %s\t\t   %s\t\t       %s\n",inventario.codigo,inventario.nombre,inventario.descrip,inventario.precio);
  199.      gotoxy(9,i);
  200.       fread(&inventario, sizeof(struct inven), 1, invent);
  201.   }
  202.     fclose(invent);
  203. getch();
  204.  
  205.   }