Sehr oft komme ich in C-Code, wo printf
Formatzeichenfolgen beginnen mit \n
:
printf ("\ nHallo");
Dies ist meiner Meinung nach eine nervige Sache, die keine Vorteile (ziemlich viele Nachteile!) In Bezug auf das Drucken bietet "Hello\n"
:
- Wenn die erste gedruckte Zeile mit beginnt
'\n'
, beginnt die Programmausgabe mit einer (unbrauchbaren) leeren Zeile - Wenn die letzte gedruckte Zeile nicht mit endet, endet die
'\n'
Programmausgabe nicht mit einer neuen Zeile (nützlich beim Lesen der Ausgabe auf einem Terminal). - Auf den meisten Terminals (in leitungsgepufferten Streams im Allgemeinen) wird die Ausgabe geleert, wenn a
'\n'
angetroffen wird, sodass eine Zeile, die nicht mit endet'\n'
, viel Zeit nach dem tatsächlichen Löschen auf dem Bildschirm angezeigt werden kannprintf
(oder vielleicht nie, wenn der Stream nie geleert wird) zum Beispiel, wenn das Programm abstürzt)
Warum mögen die Leute das?
fflush()
.Antworten:
Im Allgemeinen wird sichergestellt, dass die Anweisung in der nächsten Zeile gedruckt wird. Wenn dies am Ende der Zeile erfolgt, kann der gleiche Effekt abgeleitet werden. Es ist wirklich von geringer Bedeutung.
Update : Solange Sie einen Weg wählen und dabei bleiben, wird es wirklich keine Rolle spielen. Wenn Sie wirklich besorgt sind, geben Sie alle Ihre Anweisungen als "\ nHallo \ n" ein. Wenn Sie einige Zeilen zusammenfügen, ist dies wirklich nicht so schwer zu beheben. Gehen Sie einfach zurück und ändern Sie die beleidigende Aussage.
quelle
"Hello2\n"
) in derselben Zeile wie Ihre letzte landen (endet in"\nHelloHello2\n"
): Ist das nicht so schlimm wie Ihremessage on the same line of the previous one (eg: "\nPrevious-messageHello\n"
)? Wenn diese beiden Szenarien auf die gleiche Weise schlecht sind, sollte ein Programmierer / Projekt einen Standard übernehmen (z. B. immer'\n'
am Anfang oder am Ende setzen), aber ich kann nicht erkennen, welche Vorteile Sie durch das Setzen'\n'
am Anfang haben könnten Ihrer Nachrichten ...Zwei Wörter: persönliche Präferenz. Nach dem großen Schema der Dinge denke ich nicht, dass dies wirklich wichtig ist. Wenn Sie sich darüber ärgern, fragen Sie den Autor dieses Codes, warum er so geschrieben wird. Möglicherweise erhalten Sie einige interessante Antworten.
Ich bevorzuge sowieso alle meine Zeilenumbrüche am Ende jeder Zeile.
quelle
Als jemand, der diese Redewendung in einigen Kontexten verwendet - obwohl ich im Allgemeinen
\n
am Ende setze , um das Löschen sicherzustellen -, kann ich eine Rechtfertigung anbieten: Ich neige dazu, dies beim Formatieren vieler Zeilen zu verwenden, insbesondere wenn ich mit einer leeren Zeile beginne, so dass das\n
s Sind ausgerichtet. Dies bedeutet, dass es etwas einfacher ist, (a) zu überprüfen, ob alle Zeilen tatsächlich a\n
oder (b) enthalten, sie als Ballast zu ignorieren, und einfach den Text in den Zeilen zu lesen. In dieser Situation sieht es für mich auch ordentlicher aus, aber ich finde all diese Vorteile gering.Ein alternativer Ansatz zur Minimierung von syntaktischem Ballast besteht darin, Zeichenfolgenliterale einschließlich neuer Zeilen zu verwenden. 6.4.5 im C11-Standard verbietet diese jedoch. Sie müssen daher gut mit Ihrem Compiler sprechen und sorgfältig überlegen, was er tun wird.
quelle
Ein Grund, der nicht erwähnt wird (es sei denn, ich habe ihn verpasst), ist, dass einige CLI-Programme '\ r' verwenden, um eine Zeile wiederholt zu aktualisieren. Zum Beispiel mit Status.
Die nächste Zeile erfordert eine neue Zeile, um den Cursor auf die nächste (neue) Zeile zu bringen.
Ein anderes (sehr schlechtes) Beispiel ist, wenn der Programmierer weiß, dass möglicherweise mehrere Programme auf dasselbe Terminal schreiben. In diesem chaotischen Fall besteht die Möglichkeit, dass das führende '\ n' einen gepufferten Text ausspült, bevor mehr geschrieben und möglicherweise die Ausgaben von Schreibvorgängen verschlüsselt werden. Eine solche Bestellung ist jedoch nicht garantiert, und früher oder später wird der andere Prozess einbrechen und die Dinge ruinieren. Mach das nicht mit irgendetwas, das du deiner Mutter zeigen willst!
Ich würde versuchen, das obige Beispiel für Debugging-Zwecke beizubehalten und andere Benutzer als Sie nicht den Ergebnissen auszusetzen. Dies würde auch für mehrere nicht synchronisierte Aufgaben gelten, die in dieselbe (hoffentlich debuggende) Datei schreiben.
Der Fall, dass '\ r' zum Überschreiben einer Textzeile auf dem Bildschirm verwendet wird, ist in der CLI-Welt jedoch nicht so selten.
Es passiert schließlich etwas.
quelle