ERLEDIGT - In Datei schreiben mit fstream nicht möflich



  • Hallo,
    ich programmiere erst seit kurzer Zeit in C++ und kenne mich daher nicht wirklich aus.

    Ich habe zum lernen einen kleinen Taschenrechner programmiert, welcher 2 Zahlen je nach Rechenoperator berechnet.

    Nun möchte ich das Ergebnis nicht nur in der Konsole ausgeben, sondern auch in einer Textdatei speichert, sozusagen als Verlauf.

    Sämtliche Berechnungen, Eingaben und Ausgaben werden durch C realisiert (int, printf, scanf).

    Die Beschreibung der Datei soll in fstream, demnach in C++ stattfinden.

    Anbei der Code, vielleicht habt ihr eine Idee, wieso die Datei nicht erzeugt wird. Vielen Dank schonmal 🙂

    #include <stdio.h>
    
    //  Include für Dateischreibung
    #include <fstream>
    using namespace std;
    
    //  Variablen für Addition
    int add(int a,int b)
    {
        int erg;
        erg=a+b;
    
        return erg;
    }
    
    //  Variablen für Subtraktion
    int sub(int a, int b)
    {
        int erg;
        erg=a-b;
    
        return erg;
    }
    
    //  Variablen für Multiplikation
    int mul(int a, int b)
    {
        int erg;
        erg=a*b;
    
        return erg;
    }
    
    //  Variablen für Division
    int divi(int a, int b)
    {
        int erg;
        erg=a/b;
    
        return erg;
    }
    
    //  main
    int main()
    {
        //  Neustart des Taschenrechners
        while(true) {
    
        //  Eingabe der Zahlen und des Operators
        int x; int y; int xy; int opr;
        printf("Bitte geben Sie die erste Zahl ein: "); scanf("%i",&x);
        printf("Bitte geben Sie die Rechenoperation ein. Gültig sind +, -, * und /: "); scanf("%s",&opr);
        printf("Bitte geben Sie die zweite Zahl ein: "); scanf("%i",&y); 
    
        //  Rechnungen mit dem genannten Operatur & Fehlermeldung (else)
        if      (opr=='+')
        {
            xy=add(x,y);
            printf("\n%i  ",x); printf("%c  ",opr); printf("%i  ",y); printf("= %i",xy);
        }
        else if (opr=='-')
        {
            xy=sub(x,y);
            printf("\n%i  ",x); printf("%c  ",opr); printf("%i  ",y); printf("= %i",xy); 
    
            // Speicherung des Ergebnisses in eine Datei test.rtf
            fstream f;
            f.open("test.rtf", ios::out);
            f << "Verlauf \n" << x << opr << y << "= "<< xy << endl;
            f.close();
    
        }
        else if (opr=='*')
        {
            xy=mul(x,y);
            printf("\n%i  ",x); printf("%c  ",opr); printf("%i  ",y); printf("= %i",xy);  
        }
        else if (opr=='/')
        {
            xy=divi(x,y);
            printf("\n%i  ",x); printf("%c  ",opr); printf("%i  ",y); printf("= %i",xy);   
        }
        else
        {
            printf("\nSie haben kein gültiges Operationszeichen angegeben!");  
        }
    
            //  Abschlusslinie nach Ausgabe des Ergebnisses
            printf("\n_____________________________\n\n");
        }
        return 0;
    }
    


  • Benutz

    ofstream file("whatever.txt", ios:app); //app damit du nichts überschreibst
    

    Damit öffnest du eine Datei um in ihr zu schreiben

    ifstream file("whatever.txt");
    

    Damit öffnest du eine Datei um in ihr zu lesen



  • Okay, die Datei wird erzeugt, jedoch wird sie nicht beschrieben.

    So sieht der Code nun aus:

    if      (opr=='+')
        {
            xy=add(x,y);
            printf("\n%i  ",x); printf("%c  ",opr); printf("%i  ",y); printf("= %i",xy);
    
            fstream f;
            ofstream file("test.txt", ios::app);
            f << "Verlauf \n" << x << opr << y << "= "<< xy << endl;
            f.close();
        }
    


  • 🙂 schau doch erst mal bevor du was Postest.

    du benutzt f zum schreiben und nicht file 😞

    und mach das close weg dass erledigt der Destructor.



  • Tut mir sehr Leid 😞

    Funktioniert jetzt aufjedenfall.
    Dann kann ich das jetzt ordentlich formatieren. Vielen Dank 🙂



  • Das ist in weiten Teilen noch C und kein C++.

    - der korrekte Header heisst <cstdio> , und nicht stdio.h . Abgesehen davon ist er bei Benutzung von streams unnötig.
    - statt printf etc. benutzt man in C++ streams , z.B. cout für die Ausgabe und cin für die Eingabe.

    #include <iostream> // für cin/cout
    #include <fstream>  // für ofstream
    
    using namespace std;
    
    int main()
    {
       int x,y;
       cout << "Bitte geben Sie x ein:";
       cin >> x;
    
       cout << "Bitte geben Sie y ein:";
       cin >> y;
    
       cout << "Sie haben " << x << " und " << y << " eingegeben." << endl;
    }
    


  • Ist inzwischen alles geschehen 🙂

    Alles C++ und kann auch schön Kommarechnung


Anmelden zum Antworten