una texto resueltos que programas programa mueva movimiento mover letra hacer funciones ejercicios ejemplos como clases c++ animation console replace loading

texto - ¿Cómo hacer una animación de carga en la aplicación de consola escrita en C++?



programas en c++ (7)

La versión de Microsoft Windows.

#include <iostream> #include <windows.h> // for sleep() int main() { std::cout << ''-'' << std::flush; for (;;) { Sleep(10); std::cout << "/b//" << std::flush; Sleep(10); std::cout << "/b|" << std::flush; Sleep(10); std::cout << "/b/" << std::flush; Sleep(10); std::cout << "/b-" << std::flush; } return 0; }

Estoy codificando una aplicación de consola en c ++ y necesito hacer algo como "cargar.gif" simplemente usando caracteres ASCII.

La siguiente es la lista de los personajes que debería estar usando:

  1. -
  2. /
  3. |
  4. /
  5. -

Estos símbolos harán una animación de carga por ciclismo.

Sin embargo, cuando escribo el resultado, se convierte en:

Línea de salida 1: - Línea de salida 2: / Línea de salida 3: | Línea de salida 4: / Línea de salida 5: -

Necesito hacer esto así:

Línea de salida 1: [esto será reemplazado todo el tiempo]

Nunca debería ir a la segunda línea.

¿Cómo puedo hacer esto en C ++? ¿Hay algún tipo de función de reemplazo ?


Puede usar el carácter de retroceso ( ''/b'' ) para retroceder y sobrescribir caracteres en la consola. También deberá vaciar la salida después de cada cambio, de lo contrario la salida podría permanecer en un búfer y no aparecer en la consola.

Aquí hay un ejemplo simple:

#include <iostream> #include <unistd.h> // for sleep() int main() { std::cout << ''-'' << std::flush; for (;;) { sleep(1); std::cout << "/b//" << std::flush; sleep(1); std::cout << "/b|" << std::flush; sleep(1); std::cout << "/b/" << std::flush; sleep(1); std::cout << "/b-" << std::flush; } }


Lógica de Mike Seymour utilizada pero con un aspecto realista.

#include <iostream> #include <unistd.h> // for sleep() int main() { std::cout << "Loading Please Wait"; while (true) { sleep(1); std::cout << "." << std::flush; sleep(1); std::cout << "." << std::flush; sleep(1); std::cout << "." << std::flush; sleep(1); std::cout << "/b/b/b /b/b/b" << std::flush; } }


Y una respuesta multiplataforma:

#include <iostream> #include <chrono> #include <thread> /* Comment for c++11 solution. */ using namespace std::literals::chrono_literals; int main(int argc, char** argv) { /* Uncomment for c++11 solution. */ // std::chrono::seconds s(1); std::cout << ''-'' << std::flush; for (;;) { std::this_thread::sleep_for(1s); std::cout << "/b//" << std::flush; std::this_thread::sleep_for(1s); std::cout << "/b|" << std::flush; std::this_thread::sleep_for(1s); std::cout << "/b/" << std::flush; std::this_thread::sleep_for(1s); std::cout << "/b-" << std::flush; } return 0; }

Tenga en cuenta que chrono_literals solo está disponible en c ++ 14, puede usar std::chrono::seconds s(1); en su lugar, pasa s a std::thread::sleep_for();


for(i=0; i<100; i++) { system("cls"); cout << "Loading: " << i << " % /n"; if(i==100) { redirect to void or... ? } }


Siendo muy simple, puede usar el carácter de retroceso, como se explica aquí , que en realidad parece ser un duplicado de su pregunta. Para cosas más complicadas, se vuelve específico de la plataforma; para establecer la posición del cursor, tal vez esto pueda ayudar , si está en Windows.


#include <iostream> #include <stdio.h> #include <windows.h> int main() { for (;;) { std::cout << "/b/b/b/b/b/b/b/b/b/bLoading " << std::flush; Sleep(100); std::cout << "/b/b/b/b/b/b/b/b/b/bLOading " << std::flush; Sleep(100); std::cout << "/b/b/b/b/b/b/b/b/b/bLoAding " << std::flush; Sleep(100); std::cout << "/b/b/b/b/b/b/b/b/b/bLoaDing " << std::flush; Sleep(100); std::cout << "/b/b/b/b/b/b/b/b/b/bLoadIng " << std::flush; Sleep(100); std::cout << "/b/b/b/b/b/b/b/b/b/bLoadiNg " << std::flush; Sleep(100); std::cout << "/b/b/b/b/b/b/b/b/b/bLoadinG " << std::flush; Sleep(100); std::cout << "/b/b/b/b/b/b/b/b/b/bLoading. " << std::flush; Sleep(100); std::cout << "/b/b/b/b/b/b/b/b/b/bLoading.." << std::flush; Sleep(100); std::cout << "/b/b/b/b/b/b/b/b/b/bLoading..." << std::flush; Sleep(100); } }