C-Frage: printf("...") Ausgabe rückgängig machen / Ausgabe aus Konsole löschen

Squicky

Lt. Commander
Registriert
Sep. 2002
Beiträge
1.422
hallo

Ich schreibe ein C (kein C++) Programm.
Dabei gebe ich ab und zu dem Benutzer mit dem Befehl printf(„.info“) Informationen aus.

Dabei macht das Programm auch berechnungen die laengere Zeit brauchen (z.T. Minuten). Deshalb gebe ich auch die Info aus,wie weit das Programm in Prozent ist. Bis jetzt mache ich es so (pseudo-code):

int prozent;

prozent = funktion-Um-Prozent-Zu-Berechnen-Mit-RückgabeInteger;

printf(„Es sind bereits %d Prozent fertig ! \n“, prozent);

Dabei wird die eine zeile mit der Prozent-Info sehr oft unter einandere ausgeben, so dass die ganze Konsole nur noch aus diesen Zeilen Besteht.

Gibt es deshalb einen Befehl, der z.B. die letzt ausgegebene Zeile löscht? Oder z.B. die letzten 36 zeichen löscht?

So dass die eine Zeile aktualisiert wird.

Danke
 
printf schreibt nur auf die Standard-Ausgabe. Diese muss nicht an einer Konsole hängen. Sie muss noch nicht mal löschbar etc. sein. Deshalb gibt es solche Funktionen unter reinem C nicht.

Zugriff auf die umgebende Konsole, sofern es eine gibt, ist betriebssystemabhängig. Von daher musst du uns verraten, mit welchem Betriebssystem du arbeitest, am besten auch gleich welchen Compiler du benutzt.
 
Du könntest versuchen, mit gotoxy(...) den Cursor immer wieder auf die selbe Position zurückzusetzen und somit deine Ausgabe zu überschreiben.
 
Das Programm muss unter Windows und Linux funktionieren (bis jetzt mach es dies auch :) )
Der comipler ist für beides gcc (ein mal Windows Version und Linux Version).

was ist mit: printf("Es sind bereits %d Prozent fertig ! \r", prozent);
 
Das funktioniert leider so nicht, da Windows und UNIX \r anders interpretieren. Genaugenommen hängt es hier auch wieder von der umgebenden Konsole / Terminal ab.

Am einfachsten ist es wohl, wenn du dir eine #ifdef-Weiche baust. Schau mal ob du unter Windows den Header conio.h hast. Da kannst du die Funktion gotoxy benutzen, um den Cursor an eine beliebige Stelle im Konsolenfenster springen zu lassen. Falls es diesen Header nicht gibt, musst du hier direkt mit der Windows-API arbeiten. Am besten mal in der MSDN nach Console suchen, da sollte man eine Reihe an Funktionen ausgespuckt bekommen.

Unter Linux kannst meistens mit VT100-Codes arbeiten. Das sind spezielle Codes die du mit printf rausschreibst, die das Terminal dann richtig umsetzt. Alternativ kannst du dich der ncurses Bibliothek bedienen, die sollte das auch können. Leider habe ich im Linux-Bereich in der Hinsicht nicht wirklich viel mehr Erfahrung, um dir weiterhelfen zu können. Vielleicht schreibt noch ein Linux-Guru was dazu. Ansonsten mal Google. :)
 
Ich würds so machen:
Code:
gotoxy(x-Variable, y-Variable); //geht zum PunktXY ab wo gelöscht werden soll
clreol(); //löscht nur den Inhalt bis zu Ende der Zeile
print("Es sind 5\% geschafft");
 
Zurück
Oben