Resultados 1 al 15 de 15

Tema: Más C

  1. #1 Más C 
    Avanzado
    Fecha de ingreso
    Nov 2003
    Mensajes
    235
    Descargas
    0
    Uploads
    0
    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?
    All in all, it's just another brick on the wall (Pink Floyd).
    Citar  
     

  2. #2  
    Avanzado
    Fecha de ingreso
    Sep 2003
    Ubicación
    Malaga (España !)
    Mensajes
    191
    Descargas
    0
    Uploads
    0
    Código:
    do
    {
    ...
    scanf("%s",&tecla);
    }
    while(tecla != ' ');
    Entre ' ' tienes que poner la letra que quieras, por ejemplo la s:
    Código:
    while(tecla != 's');
    Salu2 !
    Dwarft
    Citar  
     

  3. #3  
    Iniciado
    Fecha de ingreso
    Aug 2003
    Ubicación
    Guayaquil
    Mensajes
    27
    Descargas
    0
    Uploads
    0
    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..
    Citar  
     

  4. #4  
    Avanzado
    Fecha de ingreso
    Nov 2003
    Mensajes
    235
    Descargas
    0
    Uploads
    0
    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?
    All in all, it's just another brick on the wall (Pink Floyd).
    Citar  
     

  5. #5  
    Avanzado
    Fecha de ingreso
    Nov 2002
    Ubicación
    Ciudad de México
    Mensajes
    297
    Descargas
    0
    Uploads
    0
    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 :)
    	}	
    }
    Scar_T
    Citar  
     

  6. #6  
    Iniciado
    Fecha de ingreso
    Aug 2003
    Ubicación
    Guayaquil
    Mensajes
    27
    Descargas
    0
    Uploads
    0
    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
    Citar  
     

  7. #7  
    Avanzado
    Fecha de ingreso
    Nov 2003
    Mensajes
    235
    Descargas
    0
    Uploads
    0
    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.
    All in all, it's just another brick on the wall (Pink Floyd).
    Citar  
     

  8. #8  
    Avanzado
    Fecha de ingreso
    Nov 2002
    Ubicación
    Ciudad de México
    Mensajes
    297
    Descargas
    0
    Uploads
    0
    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()).
    Scar_T
    Citar  
     

  9. #9  
    Iniciado
    Fecha de ingreso
    Aug 2003
    Ubicación
    Guayaquil
    Mensajes
    27
    Descargas
    0
    Uploads
    0
    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);

    }
    Citar  
     

  10. #10  
    Avanzado
    Fecha de ingreso
    Nov 2002
    Ubicación
    Ciudad de México
    Mensajes
    297
    Descargas
    0
    Uploads
    0
    zel089: ¿En qué quieres que te ayude?
    Scar_T
    Citar  
     

  11. #11  
    Iniciado
    Fecha de ingreso
    Aug 2003
    Ubicación
    Guayaquil
    Mensajes
    27
    Descargas
    0
    Uploads
    0
    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.
    Citar  
     

  12. #12  
    Avanzado
    Fecha de ingreso
    Sep 2003
    Ubicación
    Malaga (España !)
    Mensajes
    191
    Descargas
    0
    Uploads
    0
    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;
    Y un ejemplo de como introducir datos:
    Có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;
    }
    No se si te refieres a esto pero bueno :P jeje
    Salu2 !
    Última edición por Dwarft; 17-08-2004 a las 19:05
    Dwarft
    Citar  
     

  13. #13  
    Avanzado
    Fecha de ingreso
    Nov 2002
    Ubicación
    Ciudad de México
    Mensajes
    297
    Descargas
    0
    Uploads
    0
    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++ .

    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;
    }
    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.

    Si tienes alguna duda y la puedo responder, con gusto lo hare .
    Scar_T
    Citar  
     

  14. #14  
    Avanzado
    Fecha de ingreso
    Sep 2003
    Ubicación
    Malaga (España !)
    Mensajes
    191
    Descargas
    0
    Uploads
    0
    Ostia... A mi me ha faltado la funcion para reservar memoria :S jejeje U_U

    Seria:
    Código:
    puntero = (struct nombre_estructura *) malloc(sizeof(struct nombre_estructura));
    Siempre hay que reservar memoria cada vez que quieras introducir un dato.

    Salu2 !
    Dwarft
    Citar  
     

  15. #15  
    Iniciado
    Fecha de ingreso
    Aug 2003
    Ubicación
    Guayaquil
    Mensajes
    27
    Descargas
    0
    Uploads
    0
    Ok gracias creo que ya entendi un poco mejor, ah disculpen la demora...

    Pero tengo un proyecto que hacer y ya saben,
    Citar  
     

Marcadores

Marcadores

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •