Bunun eski bir yayın olduğunu biliyorum, ancak kabul edilenler, bir programa veya dosyaya cout'un eklendiği durumları kapsamıyor ve bu benim google aramalarımın en üstünde yer alıyor. Aşağıdakiler, hem piped hem de non-piped stdout'u biraz farklı davranışlarla ele alacaktır.
#include <iostream>
#include <functional>
#include <stdio.h>
#ifdef _WIN32
#include <io.h>
#else
#include <unistd.h>
#define _isatty isatty
#define _fileno fileno
#endif
const std::function<void(const size_t&)> progress_printer(_isatty(_fileno(stdout)) == 1 ?
[](const size_t& i) {
std::cout << "\rNumber " << i << std::flush;
} :
[](const size_t& i) {
static std::ios::off_type last(-1);
if(last != -1)
std::cout.seekp(last, std::ios::beg);
last = std::cout.tellp();
std::cout << "Number " << i << std::endl;
}
);
Bu, Windows'ta denenmemiş, ancak çalışmalıdır. Dosya tanıtıcısı veya tty olup olmadığını algılar. Eğer öyleyse, pos, son kez yazdırıldığından ya da yeni satırdan beri değişmediyse sadece '\ r' yazıyor. Eğer yeni bir satır değilse, basıldıktan sonraki son yere doğru arar.
Dosyalarda tty'ye göre farklı davranır. Bir dosya için, baskılar arasındaki akışa bir şey çıktığında, yeni satırlardan sonra bile yazılanların bir kısmının veya tamamının üzerine yazılabilir. Ttys için sadece mevcut satırın başlangıcındaki karakterleri yazar.
Yapamazsınız. 'cout' konsolu temsil etmiyor. Bir çıktı akışını temsil eder. Bu, ona yazabileceğiniz anlamına gelir, ancak zaten yazılanlar hakkında hiçbir şey yapamazsınız. 'cout', çıktıyı platformun kullandığı çıktı aygıtına yazdırmak içindir (örneğin, mutlaka bir konsol penceresi). Özellikle konsolu kullanmanız gerekiyorsa, konsol penceresini bilen OS'ye özgü bir kütüphane kullanmanız gerekir. – jalf
Niçin tamamlanmış görevlerin listesini silmek istiyorsun? Her satırda bir görev ilerleme öğesi yazdırmanız yeterlidir ve birisi programınızı çalıştırırsa ve stdout'u bir günlük dosyasına gönderirse daha iyi çalışır. – jamesdlin
Biliyorum, ama çok fazla hat olacak, kullanıcıyı infos altında boğmak istemiyorum, sadece durumu ver ve kaçtığım her görevin ilerlemesi yüzdesini. –