wann nutze ich in printf() \n? Habe es probiert, scheint mir auf denh ersten Blick keinen funktionellen Unterschied zu machen. Es heißt ja, dass der Courser durch \n an das Ende der ausgabe gesetzt wird. Das heißt für mich, dass \n eingesetzt wird, wenn ein Inhaltlicher punkt abgeschlossen ist. Stimmt das so?
Beitrag #6251538 wurde vom Autor gelöscht.
vielen Dank für die schnelle Rückmeldung. ich hatte nur diesen Auschnitt (siehe Anhang) zur verfügung. Aber wahrscheinlich werde ich wohl zu einem späteren Zeitpunkt belehrt =)
mil704e schrieb: > Habe es probiert, scheint mir auf denh > ersten Blick keinen funktionellen Unterschied zu machen. zu was? Wie ist der Unterschied einer Brücke? \n heisst nur newline, von CR ist da nicht mal die Rede! Auf jeder Schreibmaschine konnte ich neue Zeilen beginnen, auch ohne Wagenrücklauf. Wer eine neue Zeile mit Wagenrücklauf möchte muss das bestellen, also /r/n mit CR und LF, nur die Linuxwelt sieht das anders, sie kennen wohl keine Schreibmaschinen. Zugegeben als Byte noch knapp waren sparten sie ein Zeichen, aber heute ist die Zweigleisigkeit ein Anachronismus von alten Sturköpfen und keiner will nachgeben, das braucht man nicht. Mich ärgert es immer wenn ich zwischen den Welten wandel was sehe ich an Steuerzeichen? CR CRLF CR CRLF und muss immer von den doppelten CR eines rauswerfen! Wie kommt man darauf das CR automatisch LF beinhaltet? LF nur wenn LF drin sein soll! CR nur wenn CR bestellt wurde!
1 | Remarks:
|
2 | |
3 | known Problems: none |
4 | |
5 | Version: |
Joachim B. schrieb: > Wie kommt man darauf das CR automatisch LF beinhaltet? > LF nur wenn LF drin sein soll! > CR nur wenn CR bestellt wurde! Es gibt doch nun wahrhaft Schlimmeres. Beim klassischen Mac ist es halt nur CR. Somit gibt es 3 Varianten - je nach BS. In Pascal z.B. reicht auch ein CR um in der GUI eine neue Zeile zu beginnen.
Joachim B. schrieb: > \n heisst nur newline, von CR ist da nicht mal die Rede! Nicht in C. Da bedeutet es einen Sprung an den Anfang der nächsten Zeile. > Auf jeder Schreibmaschine konnte ich neue Zeilen beginnen, auch ohne > Wagenrücklauf. Und, wie oft hast du das benutzt? > Wer eine neue Zeile mit Wagenrücklauf möchte muss das bestellen, also /r/n > mit CR und LF, Wenn man unter CP/M oder ursprünglich darauf basierenden Systemen arbeitet und die Ausgabe nicht im Text-, sondern im Binärmodus geöffnet hat. Übrigens: Auf dem Mac ist es nochmal anders. > nur die Linuxwelt sieht das anders, sie kennen wohl keine Schreibmaschinen. Das ist in C Standard. Der Ausgabestream kümmert sich darum, im Falle des Textmodus das \n in das systemspezifische Zeilenende zu konvertieren. > Zugegeben als Byte noch knapp waren sparten sie ein Zeichen, aber heute > ist die Zweigleisigkeit ein Anachronismus von alten Sturköpfen und > keiner will nachgeben, das braucht man nicht. Zu denen gehörst du offenbar auch. > Wie kommt man darauf das CR automatisch LF beinhaltet? > LF nur wenn LF drin sein soll! > CR nur wenn CR bestellt wurde! Wozu braucht man eigentlich in einem Terminal - oder von mir aus auch einem Drucker einen Zeilenvorschub ohne Wagenrücklauf? Ich muss sagen, ich hab das in >30 Jahren an Programmierung nicht einmal benötigt.
:
Bearbeitet durch User
mil704e schrieb: > vielen Dank für die schnelle Rückmeldung. ich hatte nur diesen Auschnitt > (siehe Anhang) zur verfügung. Wie kommst du von der Aussage auf dem Bild zu mil704e schrieb: > Es heißt ja, > dass der Courser durch \n an das Ende der ausgabe gesetzt wird. ? Das steht da nicht.
Rolf M. schrieb: > Wozu braucht man eigentlich in einem Terminal - oder von mir aus auch > einem Drucker einen Zeilenvorschub ohne Wagenrücklauf? Ich muss sagen, > ich hab das in >30 Jahren an Programmierung nicht einmal benötigt. und ich ärgere mich in den meisten Terminal Programmen über selbstständige LF wenn ich nur eine Ausgabezeile neu printen will ohne Zeilenvorschub, es ging sogar mal soweit das ich mit ESc backspace gemacht hatte um LF zu vermeiden! Rolf M. schrieb: > Zu denen gehörst du offenbar auch. stur sind die die alles gutheissen wollen auch das Festhalten an den Unterschieden! Ich habe jedenfalls immer Mehrarbeit um Quelltexte wieder lesbarer zu machen und überfüssige LF zu entfernen die nur auf einem CR beruhen!
:
Bearbeitet durch User
Joachim B. schrieb: > Rolf M. schrieb: >> Wozu braucht man eigentlich in einem Terminal - oder von mir aus auch >> einem Drucker einen Zeilenvorschub ohne Wagenrücklauf? Ich muss sagen, >> ich hab das in >30 Jahren an Programmierung nicht einmal benötigt. > > und ich ärgere mich in den meisten Terminal Programmen über > selbstständige LF wenn ich nur eine Ausgabezeile neu printen will ohne > Zeilenvorschub, Ja, so herum sehe ich durchaus einen Sinn. Aber hier ging es um die umgekehrte Variante, also Vorschub, ohne an den Anfang der Zeile zu gehen. Für die fällt mir kein vernünftiger Anwendungsfall ein. > Rolf M. schrieb: >> Zu denen gehörst du offenbar auch. > > stur sind die die alles gutheissen wollen auch das Festhalten an den > Unterschieden! Naja, du scheinst zumindest an einer bestimmten Variante unbedingt festhalten zu wollen. Wenn das die "Gegenseite" auch tut, dann kommt eben genau das raus. > Ich habe jedenfalls immer Mehrarbeit um Quelltexte wieder lesbarer zu > machen und überfüssige LF zu entfernen die nur auf einem CR beruhen! Dann nutzt du den falschen Editor. Meiner schaltet wahlweise automatisch um oder konvertiert es optional gleich automatisch in das, was ich haben will. Und wenn man seinen Quellcode mit Tools wie svn oder git verwaltet, konvertieren die es einem schon passend.
Rolf M. schrieb: > Und wenn man seinen Quellcode mit Tools wie svn oder git > verwaltet, konvertieren die es einem schon passend. ich nutze notepad++ was ist daran falsch wenn der Code einem über ein Linux NAS lief per FTP die zusätzlichen CR waren NICHT im Quellcode, ich weiss ja was ich hochgeladen hatte. Aber schön das du dem Anwender also mir die Schuld geben kannst, alle anderen können es eh besser.
Joachim B. schrieb: > Rolf M. schrieb: >> Und wenn man seinen Quellcode mit Tools wie svn oder git >> verwaltet, konvertieren die es einem schon passend. > > ich nutze notepad++ was ist daran falsch wenn der Code einem über ein > Linux NAS lief per FTP Ob das NAS unter Linux läuft, hat doch nichts damit zu tun, mit welchen Zeilenenden dein Editor den Code abspeichert. Bei FTP muss man aber ggf. aufpassen. Das kennt einen Textmodus, in dem es die Zeilenenden konvertiert und einen Binärmodus, in dem es alle Daten 1:1 durchreicht. Aber generell würde ich keine Software mehr entwickeln ohne ein gescheites Versionierungstool. Das ist für mich seit vielen Jahren Grundvoraussetzung. > die zusätzlichen CR waren NICHT im Quellcode, ich weiss ja was ich > hochgeladen hatte. Das heißt, du lädst Dateien auf dein NAS hoch, und wenn du sie wieder runterlädst, haben sich die Zeilenenden geändert? Dann stimmt entweder mit dem FTP was nicht oder wie schon gesagt mit dem Editor. > Aber schön das du dem Anwender also mir die Schuld geben kannst, alle > anderen können es eh besser. Ich hab meinen Text nochmal durchgelesen, und ich kann nicht erkennen, wo ich dir die Schuld an irgendwas gegeben hätte. Lediglich deinem Editor habe ich die Schuld gegeben.
Rolf M. schrieb: > Wozu braucht man eigentlich in einem Terminal - oder von mir aus auch > einem Drucker einen Zeilenvorschub ohne Wagenrücklauf? Das benötigt man in einem Text-Editor, der den Cursor genau eine Zeile unter Beibehaltung der Spalte tiefer setzen will. Okay, es gibt auch die Möglichkeit, die Escape-Sequenz für Cursor-Down zu schicken. Aber man muss das ganze auch mal etwas globaler sehen, es gibt ja nicht nur Terminals und Drucker, sondern auch Dateien. Unter Unix (da kommt ja C her) braucht man in Text-Dateien nur ein '\n', auf einem Terminal oder Drucker aber ein '\r\n'. Daher wird der Output von '\n' auf Terminals wegen ONLCR gemappt auf '\r\n'. So ist es einem C-Programmierer vollkommen egal, ob sein Output auf ein Terminal oder eine Datei umgelenkt wird, er braucht nur ein '\n' zu schicken. Auf dem Terminal kommt ein '\r\n' an, in der Datei nur ein '\n', weil das bei Unix vollkommen reicht. Unter Windows, wo bei Text-Dateien jedoch auch ein '\r\n' erforderlich ist, mappt das C-Runtime-System das '\n' ebenso auf '\r\n', so dass auch hier der C-Programmierer nur ein '\n' ausgeben braucht. Das Ganze wird also portabel an das jeweilige Output-Gerät oder die Text-Datei des jeweiligen Betriebssystems angepasst. Ausnahmen bestätigen die Regel: Man kann unter Unix auch ein TTY in den "Raw-Modus" versetzen, so dass tatsächlich zwischen '\n' und '\r' unterschieden wird. Sinnvoll ist das bei dem oben angeführten Beispiel des Text-Editors. Diese nutzen das natürlich. Anderes Beispiel ist das Schreiben in Binärdateien: Hier kann der Programmierer ebenso gezielt dafür sorgen, dass kein Mapping vorgenommen wird, wenn er ein '\n' schreibt. Das ist für Unix irrelevant: Unix unterscheidet hier nicht zwischen Text- und Binärdateien, Windows jedoch schon.
:
Bearbeitet durch Moderator
Ich finde das Linux-System sinnvoll. Stell dir ein Textfile oder Terminalfenster vor mit einem LF. Mit welchen char sollen die führenden Spalten aufgefüllt werden? Einen reinen LF finde ich demnach sinnlos; LF unter Linux, der implizit einen CR enthält, dagegen schon. Und wer eine bestehende Zeile überschreiben möchte kann ja immer noch \r nehmen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.