2010-06-16 10 views
16

Ich schreibe ein Befehlszeilentool für Mac OS X, das eine Reihe von Dateien verarbeitet. Ich möchte dem Benutzer die aktuelle Datei zeigen, die gerade verarbeitet wird, aber keine Bazillion-Dateien, die das Terminalfenster verschmutzen.Zurückspulen von std :: cout, um zum Anfang einer Zeile zurückzukehren

Stattdessen möchte ich eine einzelne Zeile verwenden, um den Dateipfad auszugeben, dann diese Zeile für die nächste Datei wiederverwenden. Gibt es ein Zeichen (oder einen anderen Code) zur Ausgabe an std::cout, um dies zu erreichen?

Auch, wenn ich dieses Tool für Windows neu ausrichten wollte, wäre die Lösung für beide Plattformen die gleiche?

Antwort

16

"\ r" sollte für beide Fenster arbeiten und Mac OS X.

Etwas wie:

std::cout << "will not see this\rwill see this" << std::flush; 
std::cout << std::endl; // all done 
+1

... und Linux und so ziemlich alles andere. Ich denke, die einzige Plattform, auf die man theoretisch noch eingehen kann, ist nicht die korrekte Version von Mac OS. –

+0

Das wird tatsächlich drucken "" sehen thisthis " – Algoman

1

ich keinen Zugriff auf einen Mac haben, aber von einer reinen Konsole Standpunkt, diese wird weitgehend davon abhängen, wie es die Wagenrücklauf- und Zeilenvorschub-Zeichen behandelt. Wenn Sie das eine oder andere an die Konsole senden können, möchten Sie nur einen Wagenrücklauf senden.

Ich bin mir ziemlich sicher Mac behandelt beide Wagenrücklauf und Zeilenvorschub anders als * nix & Windows.

Wenn Sie nach In-Place-Updates suchen (z. B. die aktuelle Zeile überschreiben), würde ich empfehlen, die curses Lib zu betrachten. Dies sollte eine plattformunabhängige Möglichkeit bieten, das zu tun, wonach Sie suchen. (Denn selbst mit Standard-C++ gibt es kein plattformunabhängiges Mittel für das, wonach Sie fragen).

+0

Mac _used_ zu CR anders als Win/Unix zurück in dem Tag zu behandeln, wenn es nicht Unix selbst war. Aber jetzt ist es, und dieses Problem ist weg. –

-2

std :: cout interpretes "\ r" als Rückkehr in die beguining der Linie, wenn Sie whant nicht "< < Endl" jedes Mal zu hinzufügen, verwenden Sie "\ n"

std::cout << "this will work!\nSee... a new line!" << std::endl;

+0

\ n ist nicht cross -Plattform kompatibel (die FRBRETO hatte gefragt) Windows tatsächlich bewegt nur den Cursor eine Zeile nach unten und bleibt in der gleichen Spalte, wenn Sie drucken \ n statt \ r \ n – Algoman

Verwandte Themen