Arbeiten mit Dateien |||while *FILE != EOF Segmentation fault!!|||



  • Hallo, ich hatte schon mal das Vergnügen mit diesem Phänomen. irgendwo greife ich auf nicht reserviertem Speicher zu, mit "fin" aber ich habe alles probiert und weiss einfach nicht mehr weiter, ich hoff jemand kann mir bei diesem bug helfen. Vielen dank und LG
    maggo

    #include <math.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    int main(void){

    float x,x1,x2,y,y1,y2,z,z1,z2,dum1,dum3;
    int ray_nr,ray_nr1,ray_nr2,i,dum2,c,n;
    char name,name1,name2;
    FILE *fin;
    FILE *fout;

    if ( fin = fopen ( "rayout.txt" , "r" ) == NULL) {
    printf("Fehler beim Öffnen der Datei rayout.txt\n");
    }

    if ( fout = fopen ( "sorted Data.txt" , "w" ) == NULL) {
    printf("Fehler beim Öffnen der Datei sorted Data.txt\n");
    }

    while ( (c = fgetc( fin )) != EOF){ /*Hier tritt "Segmentastion Fault" auf*/

    fscanf(fin, "%f,%f,%f,%f,%i,%s,%f,%i",&x,&y,&z,&dum1,&dum2,&name,&dum3,&ray_nr);

    n=2;

    if (strncmp(name,"fr",n) || strncmp(name,"rs",n)){

    x1=x;
    y1=y;
    z1=z;
    name1=name;
    ray_nr1=ray_nr;
    i=0;

    fscanf(fin, "%f,%f,%f,%f,%i,%s,%f,%i",&x2,&y2,&z2,&dum1,&dum2,&name2,&dum3,&ray_nr2);

    }

    n=1;

    if (ray_nr1==ray_nr2 && strncmp(name2,"c",n)){

    fprintf(fout, "%f,%f,%f,%s,%i\n",x1,y1,z1,name1,ray_nr1);
    fprintf(fout, "%f,%f,%f,%s,%i\n",x2,y2,z2,name2,ray_nr2);

    }
    }
    fclose(fin);
    fclose(fout);
    return;
    }



  • Der Fehler tritt in der Zeile mit EOF auf, hatte vergessen das dazu zuschreiben.
    Das Programm soll daten aus einem File lesen, aussortieren und in ein anderes schreiben.
    LG
    MAggo



  • ... und wo wird EOF beim fscan abgefangen ?



  • hmmm... ich überleg gerad was du meinst, also wo "c" sozusagen abgefragt wird?
    macht das nicht c = fgetc?



  • maggolein schrieb:

    if ( fin = fopen ( "rayout.txt" , "r" ) == NULL) {
    printf("Fehler beim Öffnen der Datei rayout.txt\n");
    }

    if ((fin = fopen("rayout.txt", "r")) == NULL)
    

    HTH.



  • Vielen DAnk! bashar! zwei Klammern... so einfachm, ich versteh es zwar noch nicht ganz... aber jedenfalls läuft es jetzt wieder...
    LG
    Maggo



  • maggolein schrieb:

    ich versteh es zwar noch nicht ganz...

    In Deiner Version bekommt fin den Wert des Vergleichs

    fopen ( "rayout.txt" , "r" ) == NULL)

    zugewiesen, also true oder false ...


Anmelden zum Antworten