Schreiben in eine Text-Datei (und auslesen!)



  • 314159265358979 schrieb:

    Erstens bin ich nicht erfahren, zweitens würde ich es auch nicht so machen.

    Doch. Letztens (irgendwo) ging es um eine Template-Meta Version von irgendetwas, da hast du es ähnlich gemacht.. wobei vielleicht auch nur zum Spaß...



  • Das liegt daran, dass das der einzige weg ist, zur Compilezeit mit Strings zu arbeiten. Das willst du hier doch gar nicht, folglich kannst du deinenen String einfach als Parameter im Konstruktor übergeben.


  • Mod

    314159265358979 schrieb:

    Das liegt daran, dass das der einzige weg ist, zur Compilezeit mit Strings zu arbeiten.

    Nichts, was man nicht durch genügend obskure Regelbeugung umgehen kann:

    template <const char * string> void static_string_function() { }
    
    struct static_string
    {
      static const char value[];
    };
    
    const char static_string::value[] = "Hallo Welt!";
    
    int main()
    {
      static_string_function<static_string::value>();
    }
    

    Jetzt muss mir nur noch was einfallen, wie man das rekursiv benutzen kann, damit man damit auch was sinnvolles machen kann (z.B. static_strlen). Für Hackers statischen Rahmen reicht es aber jetzt schon.



  • @ Beitragsersteller: habt ihr schon Schleifen im Rahmen von C++ erklärt bekommen 😕

    kundendatei.close();
        main();   // das sollte man möglichst nicht so nutzen
    }
    

    Beim ersten Quelltext hattest du es auch so. Da war das aber nicht main() und somit bezogen auf den Quelltext nur nicht schön, aber gangbar.

    lokale Variable - globale Variable darauf wurde hier schon etwas geschrieben. Warum ignorierst du das?

    Beim ersten Quelltext hattest du eine Funktion ausser der main(). Das war schon wenig. Warum im 2. Quelltext nur noch main() 😕 Bist du Anhänger des Spaghetticode 😕 😃

    system ("PAUSE");
    

    brauchst du gar nicht, wenn du dein Menu mal besser sortierst.

    Schon mal etwas von switch-case-break im Unterricht gehört?



  • Schleifen hatten wir schon, aber die brechen ja irgendwann ab (wenn ein bestimmter Wert erreicht wird?). Und ich will ja, dass es durchläuft bis man sich dazu auch entschließt. Kann auch sein, dass ich hier einfach einen Denkfehler habe, bin wie schon gesagt totaler C++ Noob.. Nur muss ich in der Schule (mache Ausbildung zum Systemintegrator, brauche daher da keine Programmierung) in Anwendungsentwicklung sowas auf die Beine stellen. 😉

    Also die main() sollte man nicht nochmal aufrufen? So hatten wir das schonmal im Unterricht in einer der vielen komischen Stunden 😃 Und meine Variablen soll ich in der main() auch deklarieren?

    Soll ich mehrere Funktionen programmieren und dann in der main() nur aufrufen? Was für Funktionen sollte ich denn dann programmieren? Wenn ich die Funktionen weiß, weiß ich ja ca was da rein muss.

    switch case hatten wir mal, aber ich weiß nicht mehr genau wie es geht, bzw wie ich es hier benutzen muss. Ich nehme an einfach das, was ich jetzt als if else habe als switch case?

    Vielen Dank!



  • PS.: setw würde ja funktionieren, aber wie sage ich dem Programm, dass er nicht die komplette Zeile direkt auslesen soll, sondern nur bis zum ersten " | "? Weil sonst macht er ja die ganze Zeile..



  • @ Hacker, ich würde meine "Spielerei" ja gerne so machen, aber sowas hatten wir im Unterricht noch nicht, daher darf ich sowas glaube ich auch nicht nutzen.. 😉

    (okay, sachen in eine Datei speichern und auslesen hatten wir auch nicht, aber das sollen wir ja explizit machen 😉 )



  • @SeppJ: Vielleicht lässt sich da ja was machen, wenn man die Länge des Arrays übergibt. Dann müsste man nur noch eine Liste aus Indizes für das Array generieren und mit s[I]... hätte man dann schließlich die einzelnen Elemente. Ich kenne leider die genauen Regeln für Zeiger als Template-Parameter nicht, daher weiß ich nicht, ob das so funktioniert. Das Array müsste dann wohl auch constexpr sein.


  • Mod

    314159265358979 schrieb:

    @SeppJ: Vielleicht lässt sich da ja was machen, wenn man die Länge des Arrays übergibt. Dann müsste man nur noch eine Liste aus Indizes für das Array generieren und mit s[I]... hätte man dann schließlich die einzelnen Elemente. Ich kenne leider die genauen Regeln für Zeiger als Template-Parameter nicht, daher weiß ich nicht, ob das so funktioniert. Das Array müsste dann wohl auch constexpr sein.

    Ja, das constexpr ist wichtig, ohne wird es gar nicht erst ausgewertet. Aber auch mit bekomme ich es nicht recht hin. Hmm. 😞 Wird wohl einen Grund haben, warum man immer sagt, dass die Einzelne-Buchstaben-Methode der einzige Weg wäre.



  • Deniska93 schrieb:

    @ Hacker, ich würde meine "Spielerei" ja gerne so machen, aber sowas hatten wir im Unterricht noch nicht, daher darf ich sowas glaube ich auch nicht nutzen.. 😉

    Hahaha! Neinneinnein, es geht hundertmal einfacher. Warte, ich bastele jetzt mal an der Version mit SeppJs Idee.
    Obwohl ich garnicht wusste, dass Zeiger zur Compilezeit bekannt sein können 😃



  • Fast hab ichs. Nur noch ein doofer Fehler vonwegen constant expression. Die Regeln müsste man kennen. 😞
    http://ideone.com/suS7n


  • Mod

    314159265358979 schrieb:

    Fast hab ichs. Nur noch ein doofer Fehler vonwegen constant expression. Die Regeln müsste man kennen. 😞
    http://ideone.com/suS7n

    Irgendwie kommt mir das alles sehr bekannt vor. Das hat mich vor Jahren mal von Templatemetaprogrammierung zu Makrometaprogrammierung gebrcht, da ich so ein Konstrukt unbedingt brauchte und es nicht hinbekam. Und von da war es nur ein kleiner Schritt den ganzen Metakram wieder ganz aufzugeben :p .

    Aber das war als C++11 noch (ernsthaft!) C++0x hieß, da hatte ich noch keine constexpr.


Anmelden zum Antworten