Einfaches C++ Script für Kommentardateien



  • Hmmm ich habe es geschaft die Errors rauszubekommen, aber das Script Speichert garnichts.

    #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");
    	if (!KommentarDatei)
    	{
    		std::cout << "Dein Kommentar konnte nicht erstellt werden.\n";
    		exit(1);
    	}
    
    	std::cout << "Der Kommentar wurde erstellt! :D\n";
    
    	KommentarDatei.close();
    
    	return 0;
    }
    

    😕



  • Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • std::cin  >> "Satz";
    

    Du lässt den Benutzer ein (nicht notwendigerweise nur vier Zeichen langes) Wort in den konstanten String "Satz" einlesen. Ein Wunder dass das Programm nicht abstürzt, wenn das Wort länger ist.

    Du deklarierst vorher die Variable Satz als Array von 100 Zeichen, jedoch liest Du weder etwas in die Variable ein, noch schreibst Du sie in die Datei. Genaugenommen öffnest und schliesst Du die Datei nur. Was soll Deiner Meinung nach danach da drin stehen? 😉

    cin >> Satz;
    KommentarDatei << Satz;
    


  • Hmm genaugenommen stürzt es auch ab xD

    Das Programm sollte so laufen:

    -Befehl zum eingeben vom Kommentar
    -Eingegebenes in neue Datei Packen
    -Datei Speichern
    -Message abgeben, dass alles erfolgreich war
    -Beenden des Programms nach 5 Sec

    -Aufm Deskop ne Kommentar.txt Datei mit dem Inhalt was man ins DOS Fenster reingeschrieben hat.

    Ich dachte mit dem cin Befehl wird der Text eingelesen und mit dem Rest verarbeitet 😕

    Wie geht's den nun?



  • Ja mit cin >> variable liest du etwas in variable ein.
    Mit cin >> "variable" jedoch nicht.

    Wie es mit Satz und cin richtig geht hab ich doch geschrieben? Und als Bonus sogar noch wie Satz in KommentarDatei gelangt.. Etwas probieren (und vor allem kapieren) musst schon selbst 😉



  • WOOHOO! 😃 Ich habs geschafft ne leere .txt Datei zu machen xD

    #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");
        if (!KommentarDatei)
        {
            std::cout << "Dein Kommentar konnte nicht erstellt werden.\n";
            exit(1);
        }
    
        std::cout << "Der Kommentar wurde erstellt! \n";
    
        KommentarDatei.close();
    
        return 0;
    }
    

    Jetzt frage ich mich nur noch warum der Satz nicht in der Datei drin steht 😕
    Ich glaube das mein Programm noch auf Zahlen eingestellt ist hmm vielleicht muss ich irgendeinen Wert konvertieren? (zu char meine ich glaube ich ^^)



  • Hallo

    du must den Wert den du über cin eingelesen hast, noch in den Dateistream schreiben.

    bis bald
    akari



  • #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


Anmelden zum Antworten