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 #include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> #include <windows> FILE *fp; FILE *fp1; struct inven{ char codigo[80]; char nombre[80]; char descrip[80]; char precio[85]; }inventario; // === funciones === void crear(); void consultar(); void modificar(); void eliminar(); // ----------------PROGRAMA PRINCIPAL ---------------------------- void main() { char resp; do { printf("\n\n\t\t\t* * * * * INVENTARIO * * * * *"); printf("\n\t\t---------------------------------------------------"); printf("\n\t\t\t ALTA Y CONTROL DE PRODUCTOS "); printf("\n\t\t-------------------------------------------------\n\n\n\n"); printf("\t\t\t\t (1) Agregar \n"); printf("\t\t\t\t (2) Consultar \n"); printf("\t\t\t\t (3) Modificar \n"); printf("\t\t\t\t (4) Eliminar \n"); printf("\t\t\t\t (5) Salir "); printf("\n\n\t\t\t\tSeleccione una opci%cn: ",162); switch(resp) { case '1': crear(); break; case '2': consultar(); break; case '3': modificar(); break; case '4': eliminar(); break; } } while(resp!='6'); } // === Funcion de crear un archivo/nuevo articulo ==== void crear() { char opcion = 's'; int i=0; if ((fp =fopen("inventario.dat","ab"))==NULL ) printf("\n\n\n\n\t\t< < < Error de apertura de archivo inventario.dat > > >"); else { while(opcion == 's'){ printf("\n\n Escriba el c%cdigo del producto que desea registrar (NO EXEDER DE 16 DIGITOS): ",162); scanf("%[^\n]",&inventario. codigo); printf("\n\n Escriba el nombre del producto "); scanf("%[^\n]", &inventario. nombre); printf("\n\n Escriba la descripci%cn del producto: ",162); scanf("%[^\n]", &inventario. descrip); printf("\n\n Escriba el precio del producto: "); scanf("%[^\n]",&inventario. precio); fwrite(&inventario , sizeof(inventario ), 1, fp ); printf("\n\n\n\t\t Desea registrar otro producto? [s/n]: "); } } } //=================MODIFICAR void modificar(){ int opc,i=0; char elim[66]; printf("\nIngrese el c%cdigo del producto que desea modificar: ",162); fp =fopen("inventario.dat","r+b"); if(!fp) printf("\n Error de apertura del archivo %cinventario.dat%c\n",34,34); else{ while (((fread(&inventario , sizeof(inventario ), 1, fp ))!=0)&&i !=1){ if(!strcmp(inventario. codigo,elim )){ printf("\n\nC%cdigo: %s\n",162,inventario. codigo); printf("Nombre: %s\n",inventario. nombre); printf("Descripci%cn: %s\n",162,inventario. descrip); printf("Precio: %s\n",inventario. precio); printf ("\n %cQu%c desea modificar? ",168,130); printf ("\n\n(1) C%cdigo\n",162); printf ("(3) Descripci%cn\n",162); printf("\nEscriba una opci%cn: ",162); switch (opc){ case 1: printf ("\nIngrese el nuevo C%cdigo: ",162); scanf("%s", &inventario. codigo); break; case 2: printf ("\nIngrese el nuevo nombre: "); scanf("%s",&inventario. nombre); break; case 3: printf ("\nIngrese la nueva descripci%cn: ",162); scanf("%s",&inventario. descrip); break; case 4: printf ("\nIngrese el nuevo precio: "); scanf("%s",&inventario. precio); break; } fseek(fp ,-sizeof(inventario ),SEEK_CUR ); fwrite(&inventario ,sizeof(inventario ), 1, fp ); i=1; } } } } ///=======================================eliminar producto void eliminar() { char elim[70]; printf("\nIngrese el c%cdigo del producto que desea eliminar eliminar: ",162); fp =fopen("inventario.dat","r+b"); fp1 =fopen("inventario1.dat","wb"); if(!fp) printf("\n Error de apertura del archivo inventario.dat\n"); else{ while (((fread(&inventario , sizeof(inventario ), 1, fp ))!=0)&&(inventario. codigo!=0)){ if(strcmp(inventario. codigo,elim )){ fseek(fp1 ,sizeof(inventario ),SEEK_END ); fseek(fp1 ,-sizeof(inventario ),SEEK_CUR ); fwrite(&inventario ,sizeof(inventario ), 1, fp1 ); fp1 =fopen("inventario1.dat","r+b"); printf ("\n\n\n\n\n\n\n\n\n\n\nEl producto se ha eliminado correctamente \n"); Sleep(500); } } system("ren inventario1.dat inventario.dat"); } } //// ====================================Consulta de productos////////// void consultar (){ int i; FILE *invent; invent = fopen("inventario.dat", "r");if(invent == NULL) { printf("\nNo existe archivo inventario.dat"); } fread(&inventario , sizeof(struct inven ), 1, invent ); printf("------------------------------------------------------------------\n"); printf("C%CDIGO NOMBRE\t\tDESCRIPCI%cN\tPRECIO \n",224,224); printf("------------------------------------------------------------------\n"); while(!feof(invent )) //mientras no sea fin de archivo { gotoxy(2,i); printf(" %s %s\t\t %s\t\t %s\n",inventario. codigo,inventario. nombre,inventario. descrip,inventario. precio); gotoxy(9,i); fread(&inventario , sizeof(struct inven ), 1, invent ); } }
|