Dev - C++ - recoger un valor sin interrumpir

 
Vista:

recoger un valor sin interrumpir

Publicado por Enrique (1 intervención) el 29/09/2005 21:58:16
Hola!!

tengo un problemita, resulta que estoy realizando un programa en c++, en el cual necesito recoger un valor desde el teclado, el problema esta en que necesito recoger este valor sin que se interrumpa la ejecucion del programa, buscando en internet, encontre que la funcion kbhit() de la libreria conio.c, realiza esto, pero el problema que para poder recuperar ese valor tengo que realizar un getch o getche, el cual igual interrumpe el programa.
El programa esta constantemente imprimiendo en pantalla, pero necesito que al presionar una tecla actue de esa forma, pero sin dejar de imprimir.
PD:No uso la libreria graphics.h!!
de antemano muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:recoger un valor sin interrumpir

Publicado por el_baina (6 intervenciones) el 09/10/2005 17:07:17
amos a ver. La funcion kbhit() lo que hace es que devuelve 1 si el usuario ha pulsado una tecla y 0 en caso contrario. Cuando el usuario pulsa una tecla, el valor pulsado se guarda en un buffer que tiene el teclado, la funcion kbhit lo que hace es ver si ese buffer está vacio entoces devuelve 0 porque no hay tecla pulsada y 1 si el buffer contiene datos.
Ahora bien para poder rescatar los datos del buffer de teclado como bien has dicho tienes que utilizar la funcion getch o getche que interrumpe tu programa esto es así y no lo puedes hacer sin interrumpir, pero si utilizas bien la función getch y kbhit lo que puedes conseguir es que esa interrupcion siempre tenga éxto, es decir que cuando se ejecute la interrupción siempre halla datos en el buffer y la función getch coga los datos, esto dura un instante de tiempo muy pequeño con lo que al usuario le da la impresión de que el programa no se ha interrumpido.
ejemplo:

instruccion1
instrucción2
instrucción3
....

char c;
if(kbhit()) c = getch();

instruccion n..
...
lo que hace la sentencia if(kbhit() ) c = getch() sería que solo se interrumpiria el programa si el usuario ha pulsado una tecla, en caso contrario el programa sigue su ejecución normal sin interrumpir, y en el caso de que el usuario ya hubiese pulsado una tecla la instrucción getch() se ejecuta de manera instantanea recogiendo el primer caracter de la tecla pulsada y metiendolo en c.
Es decir, si por ejemplo el usuario pulsa la tecla 'a' durante la ejecución de las instrucciones que estan antes del getch cuando el programa llegue a la instruccion getch se ejecutará de manera instantanea y si por el contrario el usuario no pulsa una tecla pues no se ejecutará el getch()

Ejemplo:
programa que imprime los numeros del 1 al 10 indefinidamente hasta que se pulse la tecla 's' y que cuando el usuario pulsa la tecla 'a' vaya por el numero que vaya empieza a contar desde 0:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream.h>
#include <conio.h>
// no estoy seguro des si hay que incluir alguna mas
 
int main(){
     char c = 0;
     int x = 0;
     while (c != 's'){
           cout<< x<<endl;
           x++;
          if (kbhit()) c = getch();
          if (x == 10 || c == 'a') {
                  x = 0;
                  gotoxy(1,1);
         }
}
return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

recoger un valor sin interrumpir

Publicado por claudia (1 intervención) el 17/05/2013 21:50:42
GRACIAS ENTENDI MUY BIEN CON TU EXPLICACION GRACIAS.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:recoger un valor sin interrumpir

Publicado por David (1 intervención) el 06/02/2019 06:35:05
ERES UN LOCOOOOOOOOOO BRO MIL GRACIAS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar