Dev - C++ - Ayuda con este pequeño ciclo do-while

 
Vista:
sin imagen de perfil

Ayuda con este pequeño ciclo do-while

Publicado por Alejandro (1 intervención) el 23/09/2016 08:20:45
Hola a todos, estoy empezando a estudiar programación, y en una de las clases hicimos un programa en el que usamos este bucle, pero ahora no sé como terminarlo correctamente:

1
2
3
4
5
6
7
8
9
10
11
12
color:
Sleep(100);
system ("color e0");
Sleep(100);
system("color d0");
Sleep(100);
system("color c0");
Sleep(100);
system("color 20");
Sleep(100);
system("color b0");
goto color;

Cuando empiezan a cambiar los colores, no sé cómo hacer que se detenga el proceso, sólo se queda en un bucle, pero intenté hacerlo con do-while de esta manera:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
do
{
	Sleep(1000);
	system ("color e0");
	Sleep(1000);
	system("color d0");
	Sleep(1000);
	system("color c0");
	Sleep(1000);
	system("color 20");
	Sleep(1000);
	system("color b0");
}
while( !kbhit() );
system("PAUSE");

Y funciona hasta cierto punto, presiono una tecla, pero debo esperar a que el ciclo termine completamente, o sea hasta que llegue al último system("color") para que se finalice, y lo que quiero es que en cuanto presione la tecla se detenga automaticamente, sin esperar que el ciclo llegue a la última línea.
Espero puedan ayudarme, 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
sin imagen de perfil
Val: 417
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda con este pequeño ciclo do-while

Publicado por Thanatos (199 intervenciones) el 25/09/2016 09:38:56
En el código que publicaste, se puede ver que te están enseñando a usar elementos que normalmente no deberían utilizarse, como la librería conio.h y en especial la sentencia goto. Si te acostumbras a usar ésta última te será más difícil aprender a organizar el flujo de los programas.

En esta página se explica con más detalle el motivo por el que no es recomendable utilizar goto, y esta otra trata el tema de conio.h (al final tiene otros enlaces que amplían la explicación). Si haces una búsqueda rápida, seguramente encontrarás muchas más referencias sobre estos temas.

En cuanto a tu pregunta... podrías utilizar un array para almacenar las combinaciones de color y hacer los cambios uno por uno, de esa manera se puede lograr el efecto que buscas, por ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <string.h>
#include <windows.h>
#include <conio.h>
 
int main(void) {
    const char colores[5][3] = { "e0", "d0", "c0", "20", "b0" };
    const char comando[] = "color ";
    char instruccion[9];
 
    size_t i = 0;
    while (!kbhit()) {
        if (i < 5) {
            // copia el comando en el array "instruccion".
            strcpy(instruccion, comando);
 
            // agrega un color al array "instruccion".
            strcat(instruccion, colores[i]);
 
            system(instruccion);
            Sleep(1000);
            ++i;
        } else {
            // reinicia el contador para que el ciclo se repita.
            i = 0;
        }
    }
 
    getch();
    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
0
Comentar