Mi pregunta es como puedo detectar cuando el usuario pulsa una tecla y saber que tecla es.
Me explico, yo tengo un bucle
do
{
...
}
while (usuario no pulse la tecla tal).
¿como hago eso?
Mi pregunta es como puedo detectar cuando el usuario pulsa una tecla y saber que tecla es.
Me explico, yo tengo un bucle
do
{
...
}
while (usuario no pulse la tecla tal).
¿como hago eso?
Entre ' ' tienes que poner la letra que quieras, por ejemplo la s:Código:do { ... scanf("%s",&tecla); } while(tecla != ' ');
Salu2 !Código:while(tecla != 's');
que tal Dwarft,
y si quisiera que sea una tecla de funciones ej: F1,F2, etc
que tipo de variable utilizaria para almacenar el dato porque me imagino que debe ser con el codigo ASCII o algo asi..
Gracias..
Eso ya lo sabía, pero el problema de eso es que el programa para y te obliga a que escribas algo o le des al <enter>.
Yo lo que quiero es algo como el keypressed de Pascal, que compruebe si se ha pulsado una tecla y si no se ha pulsado que el programa continue.
Y otra pregunta. Existe algo parecido al delay de Pascal en C.
El delay lo que hace es que el ordenador está el tiempo que tu le pongas sin hacer nada. ¿Existe una instrucción parecida en C?
Es fácil hacer algo así en DOS.
Código:while(1) { if(kbhit()) { // Se apreto una tecla if(getch() == 0x1B) // Verificar si apreto Esc. por ejemplo break; //Rompemos el bucle :) } }
Que tal Almorca
en LCCwin32 existe Sleep(cantidad de milisegundos)
creo que es la misma en c,
Gracias Scar_T y en donde puedo ubicar las direcciones de las teclas como para ESC que es 0x1B
Gracias Scar_T era justamente lo que andaba buscando.
zel089 como uso el Sleep, porque la ayuda me dice lo siguiente:
VOID Sleep(
DWORD dwMilliseconds // sleep time
);
Requirements
Windows NT/2000: Requires Windows NT 3.1 or later.
Windows 95/98: Requires Windows 95 or later.
Header: Declared in Winbase.h; include Windows.h.
Library: Use Kernel32.lib.
pero aunque incluyo la libreria windows.h no me reconoce la función.
Pues lo que te regresa la función getch es el código ASCII de la tecla. Sinceramente no recuerdo cuales son los códigos para cada tecla, pero puedes hacer un programita que imprima el codigo de la tecla.
printf("%02x\n", getch()).
Ok gracias Scar_T, y me podrias ayudar con algo de arreglos dinamicos...
Que tal simplemente antes del proceso que quieres que se detenga por un momento
colocas Sleep(Numero de milisegundos);
por ej:
#include <windows.h>
#include <stdio.h>
void main()
{
printf("Ingrese 1 numero");
n1=GetInteger();
printf("Ingrese 2 numero");
n2=GetInteger();
t=n1+n2;
printf("Espere");
Sleep(2500);
printf("La suma es: %d", t);
}
zel089: ¿En qué quieres que te ayude?
Que tal Scar_T como puedo ingresar una matriz pero con memoria dinamica es decir como la declaro y como la trato..
La verdad se me hace algo confuso la utilizacion de punteros con memoria dinamica.
Y un ejemplo de como introducir datos:Código://Declaracion de una estructura dinamica typedef struct { int dato1; char dato2; nodo *sig; }nodo; //Declaracion de punteros para la utilizacion de la estructura dinamica nodo *i=NULL,*a,*w;
No se si te refieres a esto pero bueno :P jejeCódigo://Declaramos typedef struct { char nombre[30]; int edad; nodo *sig; }nodo; nodo *i=NULL,*a,*w; //Introduciendo datos case '1': { if(i == NULL) { printf("\nIntroduce su nombre: "); fgets(i->nombre,30,stdin); printf("\nIntroduce su edad: "); scanf("%i",&i->edad); i->sig=NULL; a=i; } else { w=NULL; printf("\nIntroduce su nombre: "); fgets(w->nombre,30,stdin); printf("\nIntroduce su edad: "); scanf("%i",&w->edad); w->sig=NULL; a->sig=w; a=w; } break; } //Visualizando datos case '2': { w=i; while(w != NULL) { printf("\nNombre: %s",w->nombre); printf("\nEdad: %i",w->edad); w=w->sig; } break; }
Salu2 !
Última edición por Dwarft; 17-08-2004 a las 19:05
Hice este pequeño programita para ver como crear una matriz usando solo C , lo iba a hacer con clases pero no se que tanto sepas de C++ .
Espero que le entiendes, tal vez te confundas un poco en la parte que asigno memoria para las columnas y luego para las filas, si es que no tienes claro como funcionan los arreglos bidimensionales en C.Código:#include <stdlib.h> //Estructura que define la matriz typedef struct { int f, c; //Filas y columnas de la matriz float **data; //Los datos que hay dentro de la matriz }Matriz; //Funcion que sirve para asignar memoria a una matriz void CrearMatriz(Matriz *m, int f, int c) { int i; m->f = f; m->c = c; //Asignamos memoria para los punteros que indican las columnas m->data = (float **)malloc(c * sizeof(void *)); for(i=0; i<c; i++) { // Asignamos memoria para las filas m->data[i] = (float *)malloc(sizeof(float) * f); } } //Funcion que sirve para liberar memoria asignada a una matriz void LiberarMatriz(Matriz *m) { int i; for(i=0; i<m->c; i++) free(m->data[i]); free(m->data); } int main(int argc, char *argv[]) { int i, j; Matriz A; //Creamos una matriz de 5x5 CrearMatriz(&A, 5, 5); //Escribimos en la ultima casilla algo A.data[4][4] = 0.5f; //Liberamos la matriz LiberarMatriz(&A); return 0; }
Si tienes alguna duda y la puedo responder, con gusto lo hare .
Ostia... A mi me ha faltado la funcion para reservar memoria :S jejeje U_U
Seria:
Siempre hay que reservar memoria cada vez que quieras introducir un dato.Código:puntero = (struct nombre_estructura *) malloc(sizeof(struct nombre_estructura));
Salu2 !
Ok gracias creo que ya entendi un poco mejor, ah disculpen la demora...
Pero tengo un proyecto que hacer y ya saben,
Marcadores