Datei Öffnen, etwas schreiben usw


  • Mod

    Swordfish schrieb:

    1. Entweder ein anonymes enum (C++03):
    enum { BUFF = 256 };
    

    oder ein konstanter Ausdruck (C++11):

    #include <cstddef>
    
    std::size_t constexpr BUFF = 256;
    

    Warum nicht einfach:

    std::size_t const BUFF = 256;
    

    Was das constexpr bei BUFF soll musst du mir mal erklären.



  • Aufgrund §5.19.2 muss es in diesem Fall nicht, ist aber auch nicht falsch.



  • int main(int argc, char** argv) { // Wofuer Parameter, die du sowieso nicht verwendest?

    Naja, das macht meine IDE beim erstellen eines neuen Projekts automatisch, genauso wie am Ende der main das return 0.

    std::string zusatz;
    
    zusatz="LA LE LU ....";
    zusatz += "...Nur der Mann im Mond gibt Ruh\n";
    zusatz.insert(0, "\n");  // Warum nicht gleich hinschreiben?
    

    Naja, das war eigentlich nur ein bisschen rumprobieren mit den string Funktionen. Ist Käse, klar.

    #define BUFF 256  // dafuer nimmt man in C keine Praeprozessorsymbole, sondern Konstanten *1)
    

    Ok, kapiert.

    Datei_in.open("text1.txt", std::ios::in );  // nimm dafuer den Konstruktor.
                                                // Die Angabe von std::ios::in ist ueberfluessig,
                                                // da bei ifstream implizit gesetzt.
    

    Ok, ehrlich gesagt ich weiß "in etwa" wie OOP funktioniert und das Grundprinzip der Klassen hab ich gecheckt, aber in meinem Buch bin ich eigentlich noch nicht soo weit und genauer angesehen hab ich´s mir auch noch nicht.
    Darum ist´s jetzt mit Konstruktor und Destruktor nicht wirklich weit her bei mir (bis jetzt) 😞

    Das die Angabe von std::ios:in eigentlich überflüssig ist hab ich gelesen, habs hald der "Form" halber hingeschrieben.
    => habs auch mal mit std::ios:in | std::ios:out versucht, aber das schreiben in die Datei mit Datei_in<<"irgendwas; geht wohl nur mit ofstream oder fstream?

    Schau dir mal ios::operator!() (C++03) und ios::operator bool() (C++11) an.
    // Wenn du es sehr verbos ausdruecken willst, suchst du vielleicht std::ifstream::is_open().

    Hmm.. ja, also ich nutzte ziemlich viel die OnlineReferenz von Cplusplus.com

    Die hat mir bei 'C' immer gut geholfen. Aber mit c++ ist das alles noch Neuland und teils unverständlich für mich. Das eine gehört da hinzu, das andere getline wida ganz woanders, hier gehört wider ein std:: hin, dort wida nicht, usw usw . .. 😕 😕 😕

    Datei_out.close();  // close() passiert auch durch den Destruktor,
                        // wenn die Variable out-of-scope geht.
    

    Siehe oben , Destrukotr... In C hab ich hald jede Datei die ich irgendwo aufgemacht hab, auch wida zugemacht.. ?

    Danke für die vielen Antworten, einiges ist jetzt klarer, einiges sind paar Fragezeichen mehr :-))


  • Mod

    Swordfish schrieb:

    Aufgrund §5.19.2 muss es in diesem Fall nicht, ist aber auch nicht falsch.

    Ja, vernachlässigt aber unnötigerweise die Kompabilität zu früheren Standards. 😕



  • War

    size_t const size = 42;
    T arr[ size ];
    

    immer schon erlaubt? Ich bild mir ein, da war mal was anders?


  • Mod

    Swordfish schrieb:

    War

    size_t const size = 42;
    T arr[ size ];
    

    immer schon erlaubt?

    ja



  • In dem Fall: ouch & sorry!



  • Gibt´s schon tausendmal die Frage, aber welche Bücher odter Tutorials würdet ihr für den Anfang mal Empfehlen, wenn man schon einigermaßen Programmieren kann und nicht mit "das ist ein INT Variable" anfangen will.... ?

    Quasi ein "Umsteiger" Buch? Wie habt ihr mit C++ angefangen und wie lange macht ihr schon c++? Also der Umfang der Sprache ist ja wahnsinn, für mich als Anfänger leicht depremierend, wenn man hier im Forum oft Code liest und sich denkt "Was zur Hölle will der überhaupt??" 🙂



  • Noch ein Nachtrag... Warum geht die ganze Funktion auch, wenn ich #include <string> weglasse??



  • cpp_beginner schrieb:

    Gibt´s schon tausendmal die Frage, aber welche Bücher odter Tutorials würdet ihr für den Anfang mal Empfehlen, wenn man schon einigermaßen Programmieren kann und nicht mit "das ist ein INT Variable" anfangen will.... ?

    Tutorials: Durch die Bank kein einziges. Mir ist keins bekannt das auch nur halbwegs gut und aktuell wäre.

    Bücher: Von wo aus umsteigen? Von einer Sprache wie z.B. Java oder C# würde ich dir die regulären Bücher empfehlen, da die Unterschiede doch recht gravierend sein können. Ansonsten ist die Frage ob eine Referenz nicht besser ist (wie The C++ Programming Language, möglichst in der neusten Auflage).

    cpp_beginner schrieb:

    Wie habt ihr mit C++ angefangen und wie lange macht ihr schon c++?

    Studium und Bücher. Ich programmiere seit etwa 15 Jahren beruflich C++ und lerne immer wieder neues (wobei: Inzwischen eigentlich weniger, da die verwendete IDE eh nicht die neuen Standard unterstützt, und aktuell für mich andere Sprachen wichtiger werden - wäre C++ aber weiterhin meine Hauptsprache würde ich mich stärker mit den neuen Standards beschäftigen).

    C++ lernt man auch nicht eben mal, wer sich intensiv mit der Sprache beschäftigt wird mindestens ein Jahr benötigen um die Sprache wirklich zu beherrschen (Was nicht heißt, das er nicht schon früher Programme schreiben kann, manche verstehen die Sprache auch nicht nach Jahrzehnten obwohl sie anderes behaupten ;p).



  • Bücher: Von wo aus umsteigen?

    Eher aus der 'C' Ecke.

    C++ lernt man auch nicht eben mal, wer sich intensiv mit der Sprache beschäftigt wird mindestens ein Jahr benötigen um die Sprache wirklich zu beherrschen

    Ein Jahr, wär ja toll, ich rechne mal eher mit 3 Jahren, da ich der ganzen Sache nur als "Hobby" nachgehen kann, beruflich programmiere ich im Automatisierungsektor Automobilindustrie hauptsächlich S7 und Kuka Robotik. Ganz andere Welt. Vor allem OOP ist darum ziemlich Neuland.

    Studium und Bücher.

    Um ersteres (und 10 Jahre jünger 🙂 ) wäre ich heute froh 😡

    Ansonsten ist die Frage ob eine Referenz nicht besser ist (wie The C++ Programming Language, möglichst in der neusten Auflage

    ).
    Tja, ich hab günstig , für 10 Euro ne Deutsche Übersetzung bekommen. Nunja... ich find nicht richtig rein in das Buch. Auf der 20 Seite sind schon Codebeispiele mit Templates und was weiß ich was für welchen Klassen,das es einem die Schuhe auszieht 😃



  • cpp_beginner schrieb:

    Bücher: Von wo aus umsteigen?

    Eher aus der 'C' Ecke.

    C++ lernt man auch nicht eben mal, wer sich intensiv mit der Sprache beschäftigt wird mindestens ein Jahr benötigen um die Sprache wirklich zu beherrschen

    Ein Jahr, wär ja toll, ich rechne mal eher mit 3 Jahren,...

    Meine Betonung war auch auf mindestens. Wenn du bereits beruflich programmierst und C-Kenntnisse hast, wäre der Weg über "Die C++ Programmiersprache" eine Variante - doch programmiert man in C++ eigentlich gänzlich anders, so das weiterhin die Standardwerke wie der "C++ Primer" (ohne Namenszusatz) nicht ganz verkehrt wären. Alternativ such nach den frei verfügbaren, aber schon etwas älteren beiden "Thinking in C++"-Büchern und lese diese quer. Sie sind zwar nicht C++11, sind aber dennoch kein schlechter Einstieg. Ich würde anschließend zu den "Effective C++"-Büchern raten...

    cpp_beginner schrieb:

    Studium und Bücher.

    Um ersteres (und 10 Jahre jünger 🙂 ) wäre ich heute froh 😡

    Ich habe mein Studium damals abgebrochen, und studiere aber inzwischen wieder "nebenher" (Was man so nebenher nennen kann - Freizeit ist während der Semester jedenfalls ein Fremdwort; ein Ausschlag war wohl das es im gleichen Gebäudekomplex ist, wie meine Arbeitsstelle). Und ich beende es im Idealfall kurz vor meinem 40igsten - in dem Bereich [WiInf] liege ich zwar am oberen Altersende, in den parallel liegenden WiWi-Gängen wäre das aber vielleicht noch im Mittelfeld.

    cpp_beginner schrieb:

    Tja, ich hab günstig , für 10 Euro ne Deutsche Übersetzung bekommen. Nunja... ich find nicht richtig rein in das Buch. Auf der 20 Seite sind schon Codebeispiele mit Templates und was weiß ich was für welchen Klassen,das es einem die Schuhe auszieht 😃

    Dann greif zu einen der oben genannten (Primer...). Und nur am Rande: Vielen "echten" Anfängern sind die Einstiegsbücher wie Primer noch zu schwer, Vorkenntnisse müssen nicht bedeuten, das sie dir zu leicht wären.



  • Besten Dank für die ausführliche Antwort!!

    Noch eine Frage, damit wäre mir momentan Verständnißmäßig geholfen:

    std::fstream SHEAT ("daten_1.txt", std::fstream::in | std::fstream::out);
    std::fstream SHEAT_2("daten_2.txt", std::ios::in | std::ios:out);
    

    Beides ist irgendwie richtig. Aber was soll man jetzt hernehmen, std::fstream::in oder std::ios::in ? Ich werd echt aus der Refernz nicht ganz schlau, muss unbedingt das mit den Klassen und wer zu wem gehört usw. auf die Reihe bekommen....

    Aus der Referenz:

    explicit fstream (const char* filename,
                      ios_base::openmode mode = ios_base::in | ios_base::out);
    

    Also bis filename ist alles klar ;-), aber wie komm ich jetzt auf std::fstream::in oder std::ios::in ??

    Ist bestimmt ziemlich lächerlich für euch, aber wenn ich die Referenz nicht richtig interpretieren kann, hab ich bedenken das das bei mir was wird 😢



  • Es ist egal, was du schreibst. Es bezieht sich immer auf std::ios_base::openmode , das von allen von std::ios_base ableitenden Klassen geerbt wird.



  • Also könnte ich auch

    std::fstream SHEAT ("daten_1.txt",  std::ios_base::in );
    

    machen?



  • cpp_beginner schrieb:

    Also könnte ich auch

    std::fstream SHEAT ("daten_1.txt",  std::ios_base::in );
    

    machen?

    Ja.
    Oder

    std::fstream SHEAT ("daten_1.txt",  std::ostringstream::in );
    

    Das ist völlig wurscht.



  • Leute soviel wie da geerbt wird, würd ich mir auch mal wünschen zu erben 😉
    Danke an alle für die geduldigen Antworten!


  • Mod

    cpp_beginner schrieb:

    Noch ein Nachtrag... Warum geht die ganze Funktion auch, wenn ich #include <string> weglasse??

    Weil andere Header wie <iostream> auch <string> einbinden dürfen. Die Betonung liegt hierbei auf dürfen, denn portabel ist es definitiv nicht wenn du <string> weglässt.

    Außer natürlich du bindest einen Header ein von dem du weißt dass er <string> einbinden muss - wie zum Beispiel <fstream> . Ist aber total unnötig und fehleranfällig solche Abhängigkeiten ausnutzen.

    Das ist völlig wurscht.

    Man sollte natürlich in einem Projekt konsistent bleiben. Und richtig konsistent kann man eigentlich nur sein wenn man std::ios::in (/ std::ios_base::in ) verwendet, weil es auch mal vorkommen kann dass man lediglich <ios> einbindet. Dazu ist ios::in so ziemlich am kürzesten.



  • cpp_beginner schrieb:

    zusatz="LA LE LU ....";
    zusatz += "...Nur der Mann im Mond gibt Ruh\n";
    

    Nur der Mann im Mond schaut zu.


Anmelden zum Antworten