Einfaches C++ Script für Kommentardateien



  • #include <iostream>
    #include <fstream>
    
    int main()
    {
        std::ofstream KommentarDatei;
        char Satz[100];
    
        std::cout << "Dein Kommentar (maximal 100 Buchstaben lang!) ----> ";
        std::cin  >> Satz;
    
    	KommentarDatei.open(Satz, std::ios_base::in);
    
    	KommentarDatei.open("Kommentar.txt");
        if (!KommentarDatei)
        {
            std::cout << "Dein Kommentar konnte nicht erstellt werden.\n";
            exit(1);
        }
    
    	std::cout << "Der Kommentar wurde erstellt! \n";
    
    	{
    		KommentarDatei.put(Satz);
    	}
    
        KommentarDatei.close();
    
        return 0;
    }
    

    Ich hab probiert den Cin Wert in die KommentarDatei reinzubekommen mit put und ios_base, aber es geht net 😕 was ist denn nun schon wieder falsch?



  • LordJaxom schrieb:

    KommentarDatei << Satz;
    


  • Hallo

    #include <iostream>
    #include <fstream>
    
    int main()
    {
        std::ofstream KommentarDatei;
        char Satz[100];
    
        std::cout << "Dein Kommentar (maximal 100 Buchstaben lang!) ----> ";
        std::cin  >> Satz;
    
        KommentarDatei.open("Kommentar.txt", std::ios_base::in); // Hier nur Dateinamen
    
        // open brauchst du nicht mehr
        if (!KommentarDatei)
        {
            std::cout << "Dein Kommentar konnte nicht erstellt werden.\n";
            exit(1);
        }
    
        KommentarDatei << Satz; // Satz in Dtaei schreiben
    
        std::cout << "Der Kommentar wurde erstellt! \n";
    
        // close brauchst du nicht.
        return 0;
    }
    

    bis bald
    akari



  • Jo Das hatte ich schonmal gemacht aber dann wurde IF aktiv und hat hat mir immer gemeldet, dass er meinen Kommentar net erstellen konnte.

    Mein Script bis jetzt:

    #include <iostream>
    #include <fstream>
    
    int main()
    {
        std::ofstream KommentarDatei;
        char Satz[100];
    
        std::cout << "Dein Kommentar (maximal 100 Buchstaben lang!) ----> ";
        std::cin  >> Satz;
    
    	KommentarDatei << Satz;
    
    	KommentarDatei.open("Kommentar.txt");
        if (!KommentarDatei)
        {
            std::cout << "Dein Kommentar konnte nicht erstellt werden.\n";
            exit(1);
        }
    
    	std::cout << "Der Kommentar wurde erstellt! \n";
    
        KommentarDatei.close();
    
        return 0;
    }
    

    Ich denke ich habe den KommentarDatei << Satz; auch richtig positioniert.



  • Wie wärs denn damit

    #include <iostream>
    #include <fstream>
    
    int main()
    {
        char Satz[100];
    
        std::cout << "Dein Kommentar (maximal 100 Buchstaben lang!) ----> ";
        std::cin  >> Satz;
    
        std::ofstream KommentarDatei("Kommentar.txt"); // Warum war da ios::in?
        // open brauchst du nicht mehr
        if (!KommentarDatei)
        {
            std::cout << "Dein Kommentar konnte nicht erstellt werden.\n";
            exit(1);
        }
    
        KommentarDatei << Satz; // Satz in Dtaei schreiben
    
        std::cout << "Der Kommentar wurde erstellt! \n";
    
        // close brauchst du nicht.
        return 0;
    }
    


  • "geht nicht" ist ne sehr kurze Fehlerbeschreibeung 😃

    Versuch's mal nicht mit put sondern mit dem << operator.

    #include <iostream>
    #include <fstream>
    
    int main() {
        using namespace std; // erspart dir das ganze std::
    
        char Satz[100];
        cout << "Dein Kommentar (maximal 100 Buchstaben lang!) ----> ";
        cin  >> Satz;
    
        ofstream KommentarDatei("Kommentar.txt");
        // kann gleich beim erstellen geöffnet werden. in steht nicht für schreiben
        if (!KommentarDatei) {
            cout << "Dein Kommentar konnte nicht erstellt werden.\n";
            return 1; // So klappts auch.
        }
        cout << "Der Kommentar wurde erstellt!\n";
        KommentarDatei << Satz; // Damit schreibst du Satz in die Datei,
        // wie du z.B. auch einen Satz in die Konsole schreibst
        // Datei muss nicht geschlossen werden, wird automatsich gemacht
        return 0;
    }
    

    mfg.

    edit: Braunstein war schneller
    edit2: mir fällt gerade auf da warn ziemlich viele schneller. Man bin ich lahm.



  • Darthshoot2 😑 schrieb:

    Ich denke ich habe den KommentarDatei << Satz; auch richtig positioniert.

    Nein. Du solltest die Datei erst öffnen und dann schreiben.



  • Vielen Dank!! 😃

    Ich hätte da noch eine kleine Fragen und zwar wie kann ich angeben, wohin die Datei kopiert werden soll? Das kann ich ausnungsweise nicht ausprobieren, weil ich überhaupt nicht weiß wie 😕



  • Indem du den Pfad mit angibst.
    z.Bsp. so (bei Windows)

    ofstream KommentarDatei("c:\\temp\\Kommentar.txt");
    


  • FETT! DANKE 😃

    (Nebenbei kann mir mal bitte kurz einer ne möglichkeit posten wie ich in den System Volume Information Ordner rein komme? 😑 Da treiben Viren ihr unwesen und so kann ich kaum im Internet sein naja ihr wisst bestimmt warum..)

    Hmm wenn die 100 Grenze überschritten wird und man drückt Enter dann schreibt der nicht, dass es fehlgeschlagen ist, erstellt aber auch keine Datei 😮

    Ahh noch ein paar Dinge ^^

    1. Es ist doch so, wenn man z.B. ein Programm hat, dass nur eine Datei von einem Ord woanders hin kopieren soll, muss man . als "Alle Dateien" angeben, weil das Programm sonst abschmiert?
    2. wie stellt man das denn ein, dass er die alte Kommentardatei nicht überschreibt?
    3. Ganz wichtig! Wie stelle ich es ein, dass er den Kommentar aufn Desktop kopiert? Weil der hat ja bei jedem einen anderen Pfad und mit ALL.Users geht net.



  • Bezüglich des System Volume Information Ordner solltest du in einen anderen Forum fragen, hier gehts um C++.
    Wegen 2. und 3. gilt die Regel: "Neue Frage - Neuer Thread"
    1. Was meinst du damit?

    Wenn die 100er Grenze überschritten ist schreibst du sowieso in Speicher der dir nicht gehört. Desweiteren fehlt die Endkennung des Strings (das wäre '\0' an Position 99).
    Du könntest statt char[] ja std::string verwenden. Da hast du dann keine Begrenzung mehr.



  • Das mit String funktioniert nicht. (Warscheinlich weil ich es falsch mache.)
    Obwohl ich heute schon öfters mit String arbeiten musste und es hat nicht geklappt warum auch immer.

    #include <iostream>
    #include <fstream>
    
    int main()
    {
    	std::string Satz;
    
        std::cout << "Dein Kommentar (maximal 100 Buchstaben lang!) ----> ";
        std::cin  >> Satz;
    
        std::ofstream KommentarDatei("Kommentar.txt");
        if (!KommentarDatei)
        {
            std::cout << "Dein Kommentar konnte nicht erstellt werden.\n";
            exit(1);
        }
    
        KommentarDatei << Satz;
    
        std::cout << "Der Kommentar wurde erstellt!\n";
    
        return 0;
    }
    

    Da habe ich den Char durch String ersetzt. Was ist falsch?
    Übrigens mit Falsch meine ich, dass er nicht compilt ^^

    P.S. Zu diesem Programm: Warum geht die Datei zu sobald mit Enter bestätigt wurde? Ich würde gerne, dass man nach der Aussage "Alles hat funktioniert oder eben nicht funktioniert" das man nochmal bestätigen muss.

    EDIT: Schon gut das mit dem String hab ich schon ^^ ich hatte include ganz oben vergessen.



  • IMMER Fehlermeldung mit schicken wenn er nicht compiliert!

    Du brauchst die Headerdatei:

    #include <string>
    

    mfg.

    edit: jo, haste selber gemerkt. Hier zu deinem Problem mit dem schließen: http://www.c-plusplus.net/forum/viewtopic-var-t-is-111042.html



  • Braunstein schrieb:

    Indem du den Pfad mit angibst.
    z.Bsp. so (bei Windows)

    ofstream KommentarDatei("c:\\temp\\Kommentar.txt");
    

    Das hat nicht funktioniert 😕 jetzt heißt die Datei c:\\temp\\Kommentar.txt,
    ist aber immer noch im selben Ordner.



  • Darthshoot2 😑 schrieb:

    (Nebenbei kann mir mal bitte kurz einer ne möglichkeit posten wie ich in den System Volume Information Ordner rein komme? 😑 Da treiben Viren ihr unwesen und so kann ich kaum im Internet sein naja ihr wisst bestimmt warum..)

    Welche Windows-Version? Unter XP Professional kannst du dir als Admin die Rechte geben, bei Home musst du IIRC in den abgesicherten Modus dafür gehen.

    Hmm wenn die 100 Grenze überschritten wird und man drückt Enter dann schreibt der nicht, dass es fehlgeschlagen ist, erstellt aber auch keine Datei 😮

    Benutz std::string (dafür musst du <string> einbinden).

    1. Es ist doch so, wenn man z.B. ein Programm hat, dass nur eine Datei von einem Ord woanders hin kopieren soll, muss man . als "Alle Dateien" angeben, weil das Programm sonst abschmiert?

    😕

    2. wie stellt man das denn ein, dass er die alte Kommentardatei nicht überschreibt?

    Is wahrscheinlich schon zu kompliziert für dich. Entweder du besorgst dir ne Liste von den Dateien oder du überprüfst für jeden Index manuell, ob du die Datei öffenen kannst.

    Oder willst du alles in eine Datei schreiben? Dann gehört in den Konstruktor von ofstream noch ein Flag:

    ofstream KommentarDatei("Kommentarx.txt", ios::append);
    

    3. Ganz wichtig! Wie stelle ich es ein, dass er den Kommentar aufn Desktop kopiert? Weil der hat ja bei jedem einen anderen Pfad und mit ALL.Users geht net.

    Desktop = %USERPROFILE%\Desktop oder %HOMEPATH%\Desktop



  • Darthshoot2 😑 schrieb:

    Braunstein schrieb:

    Indem du den Pfad mit angibst.
    z.Bsp. so (bei Windows)

    ofstream KommentarDatei("c:\\temp\\Kommentar.txt");
    

    Das hat nicht funktioniert 😕 jetzt heißt die Datei c:\\temp\\Kommentar.txt,
    ist aber immer noch im selben Ordner.

    Das ist unmöglich wenn du Windows hast 😮



  • Welche Fehlermeldung gibt denn dein Compiler?
    evtl. fehlt hier noch ein #include <string> obwohl das meistens zusammen mit iostream reingezogen wird.
    Um zum Schluß nochmal zu warten, schau mal in die FAQ des Konsolenforums. Da gibt es einen schönen Thread dazu.

    [edit]Das geht ja heute wieder schnell. 🙂 [edit]



  • Darthshoot2 😑 schrieb:

    Braunstein schrieb:

    Indem du den Pfad mit angibst.
    z.Bsp. so (bei Windows)

    ofstream KommentarDatei("c:\\temp\\Kommentar.txt");
    

    Das hat nicht funktioniert 😕 jetzt heißt die Datei c:\\temp\\Kommentar.txt,
    ist aber immer noch im selben Ordner.

    Welchen Compiler hast du?

    mfg.



  • Das mit den jedesmal ne neue Datei ist wirklich noch zu schwer für mich ^^
    Aber das andere ist ja noch besser! 😃 Danke!

    %HOMEPATH%DesktopKommentar.txt

    Das ist die Datei die er erstellt ^^ und die \\ hat er ganz weggelassen.

    ÖÖ ich weiß nicht ^^ wo kann man das denn sehen? Ich benutze C++6.0 und der Compiler hat eigendlich bis jetzt immer bestens geklappt auch bei neueren Sachen.



  • Darthshoot2 😑 schrieb:

    ÖÖ ich weiß nicht ^^ wo kann man das denn sehen? Ich benutze C++6.0 und der Compiler hat eigendlich bis jetzt immer bestens geklappt auch bei neueren Sachen.

    Meinst du VC6.0? Ne der ist nicht gut, gar nicht gut. Hat sehr viele Bugs. Versuch's mal mit dem Dev-Cpp, der ist sehr gut für Einsteiger. Weitere Ideen findest du oben rechts wenn du auf Compiler klickst.

    mfg.


Anmelden zum Antworten