2012-02-07 19 views
5

Chciałbym utworzyć małą funkcję, która powinna pokazywać aktualny status w procentach w konsoli. Funkcja powinna pokazywać tylko bieżącą wartość w linii. Muszę więc usunąć ostatnie wyjście. Czy to jest możliwe? Najlepszym przypadkiem byłoby coś z ANSI C, program powinien działać na Linux i Windows.C usuń wyjście printf

Znalazłem kilka sekwencji ucieczki, takich jak "\033[J", ale dawka nie działa.

Edit

Dobrze Próbowałem go z:

void PrintProcessBar(int i, int n) { 
    float ratio = i/(float)n;  
    printf("%.3d\b\b", (int)(ratio * 100)); 
    fflush(stdout); 
} 

Ale to po prostu wydrukować wiele zer ... Co poszło nie tak? Jeśli użyję trzech \b, nic nie otrzymam.

Rozwiązanie

float ratio = (i/(float)n) * 100; 
printf("\b\b\b\b"); 
fflush(stdout); 
printf("%.3d%c", (int)ratio, 37);   
fflush(stdout); 

i = aktualna pozycja. n = maksymalna liczba przebiegów.

Używam 4 \b, ponieważ przy pierwszym wywołaniu funkcji usunie 4 spacje.

Greetz.

+1

Odpowiedzi powinny być oddzielone od pytań. Jeśli chcesz odpowiedzieć na własne pytanie, możesz to zrobić, klikając przycisk [Odpowiedz na pytanie] na dole tej strony. – brandaemon

Odpowiedz

10

\b to sekwencja escape dla backspace. możesz użyć go ze spacjami, aby usunąć linię.

Na przykład:

printf("98%"); 
fflush(stdout); 
// sleep some time 
printf("\b\b\b99%"); 
fflush(stdout); 

ten powinien wydrukować 98%, a następnie zastąpić ją 99%.

+0

Dobra, próbowałem, ale coś poszło nie tak. Proszę zobaczyć moje ** Edytuj **. Dzięki. Greetz. – hofmeister

+0

Drukujesz trzy znaki, ale zwracasz tylko dwa za każdym razem, prawdopodobnie powinieneś zwrócić tę samą ilość wydruku (inny \ b powinien działać). – MByD

+0

Napisałem, że jeśli użyję trzech '\ b'' printf' nic nie wydrukuje. – hofmeister

6

To, na co zwracasz uwagę, to \r to powrót karetki. Powoduje, że karetka wraca na początek linii. Nie używaj użyj \n, ponieważ spowoduje to przejście do jednej linii.

Ponieważ \ r nie usuwa tekstu, ale po prostu pozwala na nadpisanie, musisz upewnić się, że wydrukowałeś wystarczająco dużo tekstu (spacje, jeśli potrzebujesz), aby wyczyścić linię.

+0

Och, czy to nie zależy od systemu? –

+0

Linia końcowa zależy od systemu ('\ n' dla systemu Linux i Mac,' \ r \ n 'dla systemu Windows, '\ n \ r' dla" Acorn BBC i wydruków wyjściowych w buforze RISC OS "i" \ r "dla Commodore 8-bitowe komputery, Acorn BBC, TRS-80, rodzina Apple II, Mac OS do wersji 9 i OS-9 [źródło] (http://en.wikipedia.org/wiki/Newline)) – Eregrith

+0

Więc będziesz mam problem z r \ rw Mac OS do 9 – Eregrith