parar ejecucion codigo mediante tecla

Atuit

Tras estar ejecutando un programilla me ha saltado una duda, lo preguntare con un ejemplo:

dentro de un bucle , que parara cuando el max sea 7 , en el que llenare un vector de 20 enteros aleatorios cada vez , del cual sacare el maximo de esos 20.

Tras llevar unos 10 minutos mirando para la pantalla , claramente , el bucle no ha parado y yo he tenido que apagar el programa, la duda me salto aqui , como consigo parar el codigo aunque la condicion del bucle no haya sido resuelta?

No se podria poner por ejemplo , en cualquier momento , pulsar por ejemplo intro y que pare? , no encuentro mucho por internet que digamos.La cosa seria , que cada vez que entre al bucle , no me pregunte si quiero continuar

lenguaje : c++
RPV:
procedimiento: bucle que para con una posibilidad minima , que hacer para pararlo manualmente? sin que este me pregunte a cada ejecucion( C++)

pd: si no me explico bn , subire el codigo que tengo hecho y a partir de ahi volvere a explicarme

B

Eventos

1
cabron

Entiendo que tú problema es que el código no funciona bien, no que quieras tener eso de parar el código con una tecla como funcionalidad del programa. Simplemente mata el proceso desde el sistema operativo, y si usas un ide para compilar y lanzar la aplicación, también suelen tener un botón para detener el proceso.

Atuit

a ver , cerrar el programa dandole a la x de arriba a la derecha , eso funciona, pero lo que quiero en si , es parar el bucle cuando quiera , sin que haga falta que se cumpla la condicion del bucle

#5 si , lo puse, se me fue , ya edite , siento por las molestias

bueno , marcho , lo dicho , si no conseguis entender mi explicacion , mas adelante subo el codigo y ya explico mejor lo que quiero hacer , por cierto , pasadme link para subir codigo a la web plis

1 respuesta
cabron

#4

Has puesto que habías apagado el ordenador en lugar de cerrar el programa...

1 respuesta
elkaoD

CTRL+C

EDIT: ok, pues en la comprobación añade para el bucle que no se esté pulsando X tecla.

NeV3rKilL

Eso no es lo que hace cualquier debugger?

glolg

#1
dentro del for o while y dependiendo que lenguaje uses, invoca un evento del estilo keypress o keydown dentro de este, y dentro de la misma condición si confirmas la tecla, rompe el bucle con un break; , así hago yo lo que creo que he entendido de tu explicación

Sino, crea una variable boleana y asígnale negativo si no detecta la tecla y positivo si la detecta, y con un switch lo acabas.
No obstante, si nos dijeses el lenguaje, subieses el código que tienes etc. posiblemente entre todos podamos ayudarte.

1 respuesta
Soltrac

evento OnKeyPress
{
pulsandoTecla = true;
}

blablabla

for
{
if (pulsandoTecla)
 break;
}

1 respuesta
Thanat0s

Mira que se me hace feísimo el ver un break dentro de un for cuando se puede utilizar un while.

1 1 respuesta
NeV3rKilL

#10 Los for son casi tan malvados como los goto.

1 respuesta
Thanat0s

#11 Más bien los break :P
No tengo nada en contra de los fors bien usados... aunque he visto cada barbaridad...

1 respuesta
glolg

#12 para solucionar eso tenemos el switch también.

1 respuesta
Thanat0s

#13 ¿Qué tiene que ver un switch con un bucle?

2 respuestas
KoRMuZ

#14 que es algo relacionado con programación

glolg

#14
en este caso, para no tener que recurrir al break dentro del bucle, creas el switch dentro de este, y te ahorras posibles liadas. No se si me entiendes.

Vamos, si no recuerdo mal, creo que usé este método en una aplicación para seccionar el contenido de una tabla con una sola sentencia.

1 respuesta
Atuit

#8 el codigo que tengo hecho en si , no sirve exactamente para explicaros que que quiero hacer , simplemente , estaba haciendo un bucle que corrio durante 10 minutos y me pregunte eso.

era un bucle while con la condicion de que si x era un numero ( posibilidad del 0,00001% de que saliera ) parase , y tuve que pararlo de antemano ya que marchaba, eso si , sin que me anda preguntando a cada ejecucion

#9 creo que es eso , muchas gracias

pd: lenguaje c++

Thanat0s

#16 Han comentado de usar break para salir del for cuando lo suyo es usar un booleano + while.

Atuit

decir que seria algo como el kbhit() de la libreria conio.h , pero en visual 2010 c++ no me funciona
parece ser que lo que no me funciona es la libreria conio.h :S ya que getch() tampoco me funciona..

Soltrac

Lo de los for y los break es una pollada, no dificulta la lectura del código para nada, es más, en según que ocasiones se lee hasta mejor que un while, nada comparable a un goto.

De todas formas, obviamente se cambia por un while y punto, creo que eso es lo de menos.

1 2 respuestas
Thanat0s

#20 Ya, es una pollada, pero en c++ queda muy feo, en java pse.

skv

En linux puedes utilizar signals.

elkaoD

#20 cuánta razón.

Es como lo de no poner return nada más que al final para respetar la programación estructurada. A mí me dificulta casi más leerlo.

2 1 respuesta
Thanat0s

#23 Ves, yo eso lo veo medio bien, siempre y cuando no metas el return dentro de un for y el metodo/funcion tenga muchas lineas de codigo.

2 respuestas
elkaoD

#24 pues yo lo veo idóneo para un for y para métodos pequeños (precisamente porque no te pierdes en la marea de código.)

A mí me resulta mucho más obvio ver un return en mitad de un for (ej. típico, encontrar un elemento) que hacer el típico apaño de while (un for es más obvio como estructura que "recorre") + variable flag (es añadir un nuevo factor que hay que entender.)

B

#24: Pues yo hago return muchas veces dentro de un for, y es algo que veo clarísimo :S

elkaoD

Por cierto, añado que no hace falta apañarlo con un while, que siempre se pone el mismo ejemplo y en la mayoría de casos se podría mantener un for:

for (int i=0; (i<array.size()) && !found; i++) {
    ....
    if (loquesea)
        found = true;
}

A mí me parece mucho peor práctica usar un while donde claramente va un for. while = bucles a secas, for = bucles "constrained" con incremento y demás.

Si usas un while con inicialización+incremento, algo estás haciendo mal.

1 1 respuesta
BLZKZ

#27 ni de coña por dios, me estas diciendo que es mas claro eso que poner un

"Mientras no encontrado sigue buscando"?

O_o yo te tenia por alguien serio xD

1 respuesta
elkaoD

#28 pues depende del día la verdad xD Ojo, no es "mientras no encontrado" sino "mientras no encontrado y otra condición que aún no sabes como incrementa, míralo unas lineas más abajo al final del bucle" (creo que queda claro a qué me refiero ;))

Supongo que es por la herencia de la programación funcional, pero no puedo ver el for de otra forma que no sea "recorrer" colecciones y el while bucles que sólo funcionan con condición de parada no-fija. Si no el for se queda como un simple bucle inc/decremental a lo Pascal.

En resumen, ¿qué es más conciso?

for (int i=0; (i<array.size()) && !found; i++) {
    ....
    if (loquesea)
        found = true;
}
int i=0;
while (i<array.size()) && !found) {
    ....
    if (loquesea)
        found = true;
    i++;
}

El while es el mismo código sólo que "sprayeado", por eso me gusta menos (hoy, mañana te digo otra cosa xD), porque el for te permite ver en una sola linea condición inicial, incremento y condición de parada (y por tanto me parece más informativo de qué coño hace.)

De hecho, para este tipo de bucles siempre me planteo (aunque acabo no usándolos por no ser muy comunes) usar esto:

for (int i=0;
     (i<array.size()) && !found;
     i++) {
    ....
    if (loquesea)
        found = true;
}

Aún no lo sabéis pero soy un revolucionario.

1 2 respuestas
BLZKZ

#29 yo los for no los uso nunca para una busqueda que acaba antes de llegar al final, los uso para recorrer colecciones completas.

Aún asi no le veo la relación con la programación funcional, y mira que durante un tiempo le he dado a haskell xD

Os olvidais también de que un while y un for a bajo nivel es exactamente lo mismo, solo que la sintaxis del while está pensada para ser mas "friendly" con el programador (alto nivel). Asi que empiezo a ver estúpida la discusion xD

2 2 respuestas

Usuarios habituales

  • BLZKZ
  • Soltrac
  • elkaoD
  • Thanat0s
  • Atuit
  • glolg
  • cabron