tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
707
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von sisela
    sisela sisela ist offline Mitglied Brokat
    Registriert seit
    Jan 2004
    Ort
    Berlin
    Beiträge
    360
    Hallo,
    folgender Code verursacht bei mir ein kleines Durcheinander. Vielleicht kann mir einer das Erklären.

    Der Funktion wird ein Stream FS übergeben. Dann wird die Datei files.dat geöffnet und Zeichen für Zeichen herausgeholt und in eine andere Datei gespeichert (mittel FS.put(c)), dass solange bis mein Trennzeichen ; kommt. Funktioniert alles super bis jetzt.
    Wenn ich aber nun nach dem Trennzeichen etwas einfügen will, wird überhaupt nix in die Datei geschrieben.
    Mit Kommentar (/* ... */): Die eine Datei wird in die andere geschrieben.
    Ohne Kommentar: kompiliert zwar aber in der (FS) Datei steht gar nichts.

    Für mich total unklar.


    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    void CFile::read_fileline(fstream &FS) {
     
    FILE* in;
    char c;
    char s[100];
     
        in = fopen("files.dat", "r");
        do{
            c = fgetc(in);
            FS.put(c);
            cout << c;
        /*  if (c == ';') {
                cout << " Bitte Text eingeben: ";
                cin >> s;
                do {
                    int i=0;
                    c = s[i++];
                    FS.put(c);
                }while(c = '\0');
            }
        */
        }while (c != EOF);
        FS.close();
    }

    Vielen Dank schon mal
    mfg Christian

    Mit nichts ist man freigiebiger als mit Ratschlägen
     

  2. #2
    Avatar von sisela
    sisela sisela ist offline Mitglied Brokat
    Registriert seit
    Jan 2004
    Ort
    Berlin
    Beiträge
    360
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    void CFile::read_fileline(fstream &FS) {
     
    FILE* in;
    char c;
    char s[100];
     
        in = fopen("files.dat", "r");
        do{
            c = fgetc(in);
            FS.put(c); 
            cout << c;
    /*      if (c == ';') {
                int i=0;
                char k;
                cout << " Bitte Album eingeben: ";
                cin >> s;
                do {
                    k = s[i++];
                    //FS.put(k);
                    FS >> k; 
                }while(k != '\0');
            }
    */  
        }while (c != EOF);

    Da war noch ein Fehler in der Schleife aber ansonsten gehts trotzdem nicht. Die Ausgabe auf den Bildschirm passiert auch erst sehr verspätet.

    hat das irgendwas mit der Pufferung zu tun.

    Versteh ich alles nicht...

    PLEASE HELP ME...
    Geändert von sisela (21.01.04 um 23:09 Uhr)
     

  3. #3
    Avatar von sisela
    sisela sisela ist offline Mitglied Brokat
    Registriert seit
    Jan 2004
    Ort
    Berlin
    Beiträge
    360
    Manchmal lösen sich Probleme von selbst.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    void CFile::read_fileline(fstream &FS) {
     
    FILE* in;
    char c;
     
        in = fopen("files.dat", "r");
        do{
            c = fgetc(in);
            FS << c;
            FS.flush();
            cout << c;
            if (c == ';') {
                cout << " Bitte Text eingeben: ";
                cin >> s;
                FS << s;
            }
        }while (c != EOF);
    }

    Ein einfache FS.flush() hats gebracht.

    Falls mir aber einer Erklären kann warum, das mit dem Puffer so ist wie es ist, wäre ich dankbar.

    Stille ist der Zustand der eintreten würde, wenn die Menschen nur noch von Dingen sprächen, von denen sie etwas verstehen.
     

  4. #4
    Registriert seit
    Jul 2003
    Ort
    Duisburg (NRW)
    Beiträge
    1.788
    Was mir noch zu deinem Code einfiel: Warum verwendest du neben der C++-Standardfilestreams auch noch die guten alten C-Filefunktionen wie fopen()? Ist so eine komische Mischung...
     

  5. #5
    Thomas Kuse Thomas Kuse ist offline Mitglied Rubin
    Registriert seit
    Aug 2001
    Beiträge
    1.411
    Ja das solltest Du wirklich lassen, dafür gibts doch einen Input- und einen Output-Stream
     

Ähnliche Themen

  1. fstream einbinden
    Von besy im Forum C/C++
    Antworten: 10
    Letzter Beitrag: 28.07.10, 14:37
  2. [c++] Dateien mit fstream kopieren?
    Von darrell im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 17.11.07, 22:47
  3. [c++] fstream-Handle übergeben
    Von ktm_frans im Forum VisualStudio & MFC
    Antworten: 5
    Letzter Beitrag: 26.06.07, 08:52
  4. Antworten: 2
    Letzter Beitrag: 18.04.07, 19:19
  5. Getline bei FSTREAM wie bei Cin ?
    Von G-Mein im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 04.06.04, 15:41