Programm funkt. nicht!



  • Hallo!
    Könntet ihr mir bitte helfen! Das u. a. Programm funktioniert fast...., aber leider nur fast. Ich kann zwar ein File erstellen und auch etwas hineinschreiben, aber das Lesen (Unterprogramm lesen) funktioniert einfach nicht!

    Ich danke euch!
    mfg
    Lyric

    # include <stdio.h>
    # include <conio.h>
    # include <ctype.h>
    # include <string.h>

    void lesen();
    void schreiben();

    void main()
    {char antwort;
    clrscr();

    cout<<"Schreiben/Lesen einer Datei.\n";
    cout<<"Abbruch beim Schreiben mit <STRG> Z\n";

    do{cout<<"S(chreiben), L(esen), E(nde) :";
    antwort=toupper(getch());
    cout<<antwort<<"\n";

    switch(antwort)
    { case 'L':
    lesen();
    break;
    case 'S':
    schreiben();
    break;
    }
    } while(antwort!='E');
    }

    //----------------------------------------------------------------------------

    void schreiben ()
    {char zeichen;
    char dateiname[30];

    FILE *fp;

    strcpy(dateiname,"Adaten");

    fp=fopen(dateiname,"w");

    while ((zeichen=fgetc(stdin))!=EOF)
    fputc(zeichen,fp);

    fclose (fp);
    }

    //-----------------------------------------------------------------------------

    void lesen ()
    {char zeichen;
    char dateiname[30];

    FILE *fp;

    fp=fopen(dateiname,"r");

    while ((zeichen=fgetc(fp))!=EOF)
    fputc(zeichen,stdout);

    fclose(fp);

    }



  • Ich kenne mich in C++ nicht aus, aber in C waere das so:

    In der Funktion (oder Unterprogramm) "lesen" erzeugst Du ein Array dateiname[30].
    Dieses ist aber mit willkuerlichen Zeichen gefuellt, da Du ihm noch nichts zugeordnet hast. Das Array in "schreiben" ist ausserhalb von "schreiben" unsichtbar.
    Man sollte allgemein immer durch

    if ((fp = fopen("xyz.bla", "r")) == NULL) {
       fprintf(stderr, "Datei xyz.bla konnte nicht geoeffnet werden.\n");
       exit(-1);
    }
    

    nachpruefen, ob das Oeffnen lauft wie es soll.
    Du koenntest den Dateinamen in main initialisieren und als Zeiger an die beiden Unterprogramme uebergeben. Wie das genau geht wiess ich auf die Schnelle auch nicht, aber das bekommst Du sicher hin.


Anmelden zum Antworten