Saya akan mengatakan bahwa perpustakaan seperti ncurses akan digunakan untuk hal-hal seperti itu. kutukan membantu menggerakkan kursor di sekitar layar dan menggambar teks dan semacamnya.
NCurses
Sesuatu seperti ini:
std::stringstream out;
for (int i = 0; i< 10; i++)
{
out << "X";
cout << "\r" << "[" << out.str() << "]";
}
Sedikit licik adalah karakter carriage return "\r" yang menyebabkan kursor berpindah ke awal baris tanpa turun ke baris berikutnya.
Orang lain telah menunjukkan bahwa Anda dapat menggunakan \r
untuk kembali ke awal baris saat ini, dan menimpa seluruh baris.
Kemungkinan lain adalah dengan menggunakan karakter backspace ("\b") untuk menghapus beberapa spasi, dan hanya menimpa spasi tersebut. Ini dapat memiliki beberapa keuntungan. Pertama, ini jelas menghindari keharusan untuk meregenerasi semua yang ada di barisan, yang terkadang bisa sedikit menyakitkan (meskipun itu cukup tidak biasa). Kedua, ini dapat menghindari rasa sakit dalam menampilkan data yang (misalnya) menyusut ukurannya saat Anda menulisnya -- misalnya, jika Anda menampilkan hitungan mundur dari 100 menjadi 0, dengan \r
Anda harus berhati-hati dalam menimpa seluruh panjang sebelumnya, atau hitungan mundur Anda akan berubah dari (misalnya) 100 menjadi 990 (yaitu, membiarkan "0" sebelumnya tetap utuh).
Perhatikan, bagaimanapun, bahwa sementara back-space dalam satu baris biasanya berfungsi, backspace di awal baris mungkin atau mungkin tidak memindahkan posisi kursor/tulis kembali ke baris sebelumnya. Untuk sebagian besar tujuan praktis, Anda hanya dapat bergerak dalam satu baris.
coba gunakan \r
bukannya \n
saat mencetak "versi" baru.
for(int i=0;i<=100;++i) printf("\r[%3d%%]",i);
printf("\n");