Frage zum Speichern & Laden von Datein



  • #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    main()
    {
        ifstream GetInfo("C:\\Termin");
    
        GetInfo.open("C:\\Termin");
    
            cout << " Termin Info:\n\n";
    
            GetInfo >> "C:\\Termin";
    
        GetInfo.close();
    
        cin.get();
    }
    

    geht nicht..... sorry ich weiss ich stell mich doof an.... kanns mir nun mal einer gerade richten ThanX



  • Versuchs mal folgender maßen:

    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    int main()
    {
        ifstream GetInfo;
        char Text[50];  //war vorhin auch nur 50
    
        GetInfo.open("C:\\Termin.txt", ios::in);
    
        cout << " Termin Info:\n\n";
        GetInfo.read(Text, 49);  // in das char-Array speichern
        cout << Text;  // Ausgabe
    
        GetInfo.close();
    
        cin.sync();  //Tastaturpuffer löschen
        cin.get();  // auf ENTER warten
        return 0;
    }
    


  • hi... ich hätte da mal noch ne frage zu:

    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    int main()
    {
        ifstream GetInfo;
        char Text[50];    // HIER AUCH STRING MÖGLICH???
    
        GetInfo.open("C:\\Termin.txt", ios::in);
    
        cout << " Termin Info:\n\n";
        GetInfo.read(Text, 49); // UM STRING HIER ZU NUTZEN 
        cout << Text;  
    
        GetInfo.close();
    
        cin.sync();  
        cin.get();  
        return 0;
    }
    

    wollte wissen ob man statt char taxt[] auch nen string benutzen cann da mein protokoll ja doch dach schoen lang wird... koennte mir jmd. dann mal hier ein Beispiel posten um zu veranschaulichen wies mit nen string geht... dnake!!



  • zum Beispiel:

    #include <iostream>
    #include <fstream>
    #include <string>
    
    using namespace std;
    
    int main( )
    {
        ifstream file( "D:\\Termin.txt" );
        string text;
    
        do {
            text += static_cast< char >( file.get( ) );
        } while( !file.fail( ) );
    
        file.close( );
    
        cout << text;
    }
    

    Greetz, Swordfish



  • hmmm ja ne shon klar gg... gehts net noch nen bissel einfacher verstaendlicher sword??? hab mich mit static_cast noch net so beschaeftigt....trotzdem thanX



  • ein static_cast entspricht einem einfachen C-Type-Cast:

    also das ist gleichbedeutend:

    int i;
    long l = 34687;
    i = static_cast<int>(l);
    

    ==

    int i;
    long l = 34687;
    i = (int)l;
    

    👍



  • ein static_cast entspricht einem einfachen C-Type-Cast:

    Das ist so nicht ganz korrekt. Mit einem C-Cast kann man z.B. ein const wegcasten. Mit einem static_cast geht das nicht (dafür gibt es const_cast).



  • Da könnt' sich doch mal jemand der Mod's erbarmen und einen FAQ Beitrag zu den verschiedenen Casts schreiben.

    Greetz, Swordfish



  • Z2 schrieb:

    ein static_cast entspricht einem einfachen C-Type-Cast:

    Mit einem C-Cast kann man z.B. ein const wegcasten.

    Ahja...und wie ?



  • so:

    #include <iostream>
    
    using namespace std;
    
    #ifdef STUPID_COMPILER
    
    void no_cast_away( const char *untouchable )
    {
        // Sollten nur dämliche Compiler - wenn überhaupt - zulassen
        // meiner: error C2166: L-Wert gibt ein konstantes Objekt an
    
        untouchable[ 1 ] = 'a';
    }
    
    #endif /* STUPID_COMPILER */
    
    void c_cast_away( const char *untouchable )
    {
        // Hups, const ist weg:
    
        ( (char*) untouchable )[ 1 ] = 'a';
    }
    
    void cpp_cast_away( const char *untouchable )
    {
        // mit C++ muss man sich wissentlich in's Knie schießen:    
    
        const_cast< char* >( untouchable )[ 1 ] = 'a';
    }
    
    int main( )
    {
        char *foo = new char[ 10 ];
        strcpy( foo, "Hello!" );
    
        cout << "original: " << foo << endl;
    
        c_cast_away( foo );
        cout << "after c_cast_away( ): " << foo << endl;
    
        strcpy( foo, "Hello!" );
    
        cpp_cast_away( foo );
        cout << "after cpp_cast_away( ): " << foo << endl;
    
        delete [ ] foo;
    }
    

    Greetz, Swordfish



  • LOL, wer hat den bitte sowas erfunden ?!, das ist doch total sinnlos 😮

    Wenn ich const haben will, dann will ich auch const haben 💡

    Aber ok 'leuchtet ein'^^...

    PS: Einer meiner Compiler meckert auch bei deiner ersten Funktion (MVC++ 6.0)



  • CodeFinder schrieb:

    LOL, wer hat den bitte sowas erfunden ?!, das ist doch total sinnlos 😮

    Wenn ich const haben will, dann will ich auch const haben 💡

    Nö, macht doch nur, was man ihm sagt

    const char *constant;
    char *not_constant = ( char* ) constant;
    

    er wandelt "const char*" nach "char*". Der eigentliche Pferdefuß ist der, daß sowas in C mal eben so aus versehen passiert. In C++ ist es wegen des const_cast< > operators nicht mehr möglich, sich "aus versehen" in's Knie zu schießen. Dazu braucht's dann halt 'ne gehörige Portion Absicht. 😃

    CodeFinder schrieb:

    [...] Einer meiner Compiler meckert auch bei deiner ersten Funktion (MVC++ 6.0)

    Das ist auch gut so! Aber denkst du nicht, du solltest ihn dann mal "in Frieden ruhen" lassen!?

    Greetz, Swordfish


  • Mod

    obwohl die beschränkung, dass von den template-style casts nur const_cast in der lage ist, const-qualifikation wegzucasten, wichtig ist, so ist doch ein C-style cast noch in anderer hinsicht etwas ganz anderes als ein static_cast.
    als faustregel gilt, dass mit static_cast alle die konvertierungen möglich sind, die auch implizit erlaubt sind, sowie deren umkehrungen (mit ausnahme des wegcastens von const)
    ein C-style cast hat, in derselben situation angewandt, denselben effekt. er erlaubt allerdings noch weitere konvertierungen: solche, die ein static_cast mit einem const_cast kombinieren. und solche, die sonst nur mittels reinterpret_cast (ggf. ergänzt mit const_cast) möglich sind. das bedeutet, dass ein bestimmter ausdruck, der einen c-style cast enthält, möglicherweise kontextabhängige bedeutung hat (was eigentlich immer schlecht ist). beispiel:

    struct A;
    struct B;
    B* foo(A* p) { return (B*)p; } // reinterpret_cast<B*>(p);
    struct A {};
    struct B: A {};
    B* foo(A* p) { return (B*)p; } // static_cast<B*>(p);
    

    das schlimme daran ist, dass ein compiler hier nicht einmal warnt, wenn der cast al s reinterpret_cast interpretiert wird.



  • Swordfish schrieb:

    Nö, macht doch nur, was man ihm sagt

    Ja, klar macht er, was man ihm sagt...aber findest du die Idee eines const-Casts sinnvoll (mal davon abgesehen der ein const-Cast in C++ offentlichtlicher ist) ? - Hast du den jemals verwendet ? ➡ ⚠
    Also irg.-wie strebt der gegen meine Logik 😃 🤡

    Swordfish schrieb:

    Das ist auch gut so! Aber denkst du nicht, du solltest ihn dann mal "in Frieden ruhen" lassen!?

    Greetz, Swordfish

    Jo auf jeden Fall 😉 naja der Comp. is sowieso voller Bugs... 👎

    PS: Danke nochmal für das erläuternde Beispiel bzgl. C/C++ und const-Casts 👍



  • CodeFinder schrieb:

    Ja, klar macht er, was man ihm sagt...aber findest du die Idee eines const-Casts sinnvoll (mal davon abgesehen der ein const-Cast in C++ offentlichtlicher ist) ? - Hast du den jemals verwendet ? ➡ ⚠
    Also irg.-wie strebt der gegen meine Logik 😃 🤡

    Ja, ist praktisch, wenn man an Code von anderen darf, die keine Ahnung von const correctness haben.



  • Michael E. schrieb:

    CodeFinder schrieb:

    Ja, klar macht er, was man ihm sagt...aber findest du die Idee eines const-Casts sinnvoll (mal davon abgesehen der ein const-Cast in C++ offentlichtlicher ist) ? - Hast du den jemals verwendet ? ➡ ⚠
    Also irg.-wie strebt der gegen meine Logik 😃 🤡

    Ja, ist praktisch, wenn man an Code von anderen darf, die keine Ahnung von const correctness haben.

    Bezug ? ⚠



  • Beispiel:

    // foo.h (gehört zu ner Lib)
    
    void print(Bar &b)
    {
        cout << b;
    }
    
    // end of foo.h
    
    // baz.cpp
    
    #include "foo.h"
    #include "bar.h"
    
    const Bar bar(42);
    
    print(bar);    // error, shit!
    print(const_cast<Bar>(bar));    // klappt :)
    

    Die Funktion print() aus ner externen Lib übernimmt kein konstantes Bar-Objekt, obwohl sie es nicht verändert. Wenn ich jetzt wie in baz.cpp ein konstantes Objekt hab, meldet mir der Compiler beim Aufruf von print(bar) einen Fehler.


Anmelden zum Antworten