In text file schreiben geht nicht!



  • Guten Tag,
    ich bin ein Anfänger und lerne erst seit kurzem C++ und hätte eine Frage.
    Ich habe eine Funktion geschrieben, die in eine Text file schreiben soll doch sie funktioniert nicht.
    Code :
    int write()
    {
    ofstream file;
    file.open("voc.txt");

    string voc;
    getline(cin, voc);
    cout << voc;
    if (file.is_open())
    {

    if (voc == "10")
    {
    file.close();
    return true;
    }
    else
    {
    file << voc;
    file.close();
    return false;
    }
    }
    Das Textdokument wird zwar erstellt, aber es wird nicht hereingeschrieben.
    Danke im Voraus!



  • Zunächst einmal für Code immer die Code-Tags benutzen. Das macht den Code dann auch lesbar. 😉

    Und dein Code funktioniert eigentlich schon.
    Poste mal ein komplettes, kompilierbares Code-Bespiel, das bei dir nicht funktioniert.



  • using std::cout;
    using std::cin;
    using std::endl;
    int main()
    {
    
    	bool keepGoing = true;
    	do
    	{
    		cout << "1 -- Neue Vokabeln hinzufügen" << endl << "2 -- Vokabeln üben" << endl << "3 -- Beenden" << endl;
    		int response;
    		cin >> response;
    		if (response == 1)
    		{
    
    			bool keepIf = 1;
    			while (keepIf == 1)
    			{
    				bool dontStop;
    				dontStop = write();
    				if (dontStop == true)
    				{
    					return 0;
    				}
    
    				int y = 0;
    
    				if (y == 1)
    				{
    					keepIf = 0;
    				}
    				else
    				{
    					keepIf = 1;
    				}
    			}
    		}
    		else if (response == 2)
    		{
    			cout << "2\n";
    		}
    		else if (response == 3)
    		{
    			keepGoing = false;
    		}
    	}
    
    	while (keepGoing == true);
    	return 0;
    }
    

    Das ist meine main.cpp, bitte Auswahlen außer 1 ignorieren, bin noch nicht so weit.

    #include "stdafx.h"
    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;
    
    int write()
    {
    	ofstream file;
    	file.open("voc.txt");
    
    		string voc;
    		getline(cin, voc);
    		cout << voc;
    		if (file.is_open())
    		{
    
    			if (voc == "10")
    			{
    				file.close();
    				return true;
    			}
    			else
    			{
    				file << voc;
    				file.close();
    				return false;
    			}
    		}
    

    Dies ist meine write.cpp

    #ifndef TOOLS_H	
    #define TOOLS_H
    
    int write();
    extern bool keepIf;
    #endif
    

    Das die Header Datei. Ich weiß nicht ob du das meinst mit kompletten kompilierten Code, tut mir leid wenn du was anderes meinst 😞 😕


  • Mod

    Das wird ja immer verwirrender. Jetzt sag doch mal ganz klipp und klar, welchen Code du nutzt und was du machst. Copy&Paste, ein Programm, ein vollständiges Programm.



  • Das kompiliert so nicht, wenn in deinem main.cpp includest du nix, also ist dein write dort unbekannt.

    Lass das extern bool keepIf; weg. Weißt du überhaupt, wozu das gut ist?

    Dein Hauptproblem wird sein, dass du im write folgendes machst:

    - öffne (und leere) die Datei
    - lies was ein
    - wenn es "10" ist, return 1.
    - sonst schreib das eingelesene in die Datei, return 0.

    Vielleicht willst du die Datei zum Anhängen öffnen? Schau dir mal in http://www.cplusplus.com/reference/fstream/ofstream/ofstream/ an, wie man eine Datei zu Anhängen öffnet.

    Warum ist dein "write" eine Funktion, die "int" zurückgibt, wo du doch nur true oder false returnst und das Ergebnis danach wieder einer bool-Variablen zuweist?

    Du kannst die Funktion "write" übrigens auch in der Datei main.cpp unterbringen. Du benötigst noch keine zusätzlichen header/cpp-Dateien.



  • Dein main.cpp inkludiert nichts. Ohne das wird es natürlich nicht kompilieren. 😉
    Weiterhin fehlt in deiner write.cpp eine abschließende geschweifte Klammer.
    Und in deiner main.cpp: was soll die Schleife mit keepIf? Ich verstehe irgendwie den Sinn dahinter nicht. Deine write-Funktion soll doch außerdem einen bool-Wert zurückgeben. Warum hat die Funktion dann den Datentyp int?
    Was du eventuell auch noch verbessern könntest, wäre, dass man sieht, wann man eine Vokabel eingibt und wann man zwischen 1, 2 oder 3 wählt. Dass man die Eingabe mit 10 beendet, weiß auch niemand, der den Code nicht kennt.
    Worüber du dir auch noch Gedanken machen solltest, ist das Einlesen der Datei: wie willst du die Wörter trennen?
    Derzeit werden die Wörter einfach hintereinander geschrieben. Hier bietet sich eventuell ein Zeilenumbruch an, den du einfach in die Datei nach jedem Wort einfügst. Außerdem wird jetzt auch jedes Mal die Datei wieder überschrieben.
    Zuletzt solltest du dir noch anschauen, wie man eine Datei öffnen kann.
    Du überschreibst hier jedes Mal, bei jedem Aufruf der Funktion write, wieder deine Datei. Ich würde dir empfehen mal die Openmodes für ofstream zu googlen oder nachzuschlagen.

    Edit: vergessen mal neu zu laden. 🙄



  • Habe die Header Datei eigentlich inkludiert habe nur vergessen sie zu Copy & Pasten sry.
    Tut mir echt leid, bin wie gesagt Anfänger und achte noch nicht so auf effizienten Code, tut mir echt leid, wenn das eine Qual zum lesen ist 😞 ⚠
    Meinst du damit, dass durch die Schleife die Text Datei immer wieder geleert wird und so nichts zustande kommt ? Wenn ja, wie kann ich verhindern, dass meine Text Datei geleert wird ?



  • Danke an alle, ich verstehe das Problem und werde auch meinen Code generell verbessern, vielen Dank an alle die sich diese über diese dummen Fehler Gedanken gemacht haben 🙂


Anmelden zum Antworten