Problem mit sscanf



  • Zähle die Zeilen in der Schleife und wenn deine gewünschte Zeilennummer an der Reihe ist: zack - treten deine dummies in Aktion!



  • ich kapier das irgendwie.
    meinste das so?

    fgets( zeile, 99, datei );     //Funktion zeigt die .txt Datei im Dialogfeld an
        while( ! feof(datei) )         //Funktion nochmal nachgucken!
        {
            if (zeile=6)
            {
            sscanf(zeile,"%g %g %g %g %g %g",&dummi1,&hoehe,&dummi2,&dummi3,&dummi4,&dummi5 );   //%e oder %E= double im Format [-]d.ddd e±dd bzw. [-]d.ddd E±dd; %g beste Form aus %f und %e
            printf("%g",hoehe);
            }
            printf("%s", zeile );
            fgets( zeile, 99, datei );
        }
    

    wenn das nicht so sien sollte kannste mir mal nen anstaz geben?
    ich sterbe gerade tausend tode 😡



  • Hi habe nochwas probiert aber klappt auch nicht 😞

    fgets( zeile, 99, datei );     //Funktion zeigt die .txt Datei im Dialogfeld an
        while( ! feof(datei) )         //Funktion nochmal nachgucken!
        {
            for( zeile=0, i<20, zeile++)
            if (zeile==7)
            {
            sscanf(zeile,"%g %g %g %g %g %g",&dummi1,&hoehe,&dummi2,&dummi3,&dummi4,&dummi5 );   //%e oder %E= double im Format [-]d.ddd e±dd bzw. [-]d.ddd E±dd; %g beste Form aus %f und %e
            printf("%g",hoehe);
            break;
            }
            printf("%s", zeile );
            fgets( zeile, 99, datei );
        }
    


  • Du machst aus einen Array eine Zählvariable, das kann nur schiefgehen. Nimm einen extra Zähler für die Zeilen.
    Also, sinngemäß so:

    int zaehler = 0;
    while( ! feof(datei) )
    {
        fgets( zeile, 99, datei );
        zaehler++;
        if(zaehler == ?)
            sscanf(zeile,"%g %g %g %g %g %g",&dummi1,&hoehe,&dummi2,&dummi3,&dummi4,&dummi5 ); 
    }
    


  • SUPER DANKE!!!

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    char datnam[30] = "SPZ 180 .txt";
    double dummi1, dummi2, dummi3, dummi4, dummi5;
    double hoehe;
    int main( void )
    {
        FILE * datei;  
        int zaehler = 0; 
        char zeile[100]; 
        char i, str1[5];               //i=Funktion der Dateiüberprüfung
                                       /*str1 ist der Bezug zu den ersten 4 Zeichen
                                         in Zeile 1*/
        datei = fopen( datnam, "r" );  //einlesen der Datei
        if( datei == 0 )               //wenn in der Datei nichts drin ist dann:
        {
            printf("Fehler: Falsche Datei gewaehlt!");
            getchar();
            return 1;
        }
    
                                       //Überprüfung der ersten 4 Zeichen;
        fgets( str1, 5, datei );       //fgets braucht noch einen Bit für nachher
        i = strncmp ( str1 ," RBG", 4);
        if (i != 0)
        {
            printf("Fehler: Falsche Datei gewaehlt!");
            getchar();
            return 1;
        }
    
        fgets( zeile, 99, datei );     //Funktion zeigt die .txt Datei im Dialogfeld an
        while( ! feof(datei) )         //Funktion nochmal nachgucken!
        {
            printf("%s", zeile );
            fgets( zeile, 99, datei );
            zaehler++;
            if(zaehler == 6)
            sscanf(zeile,"%g %e %g %g %g %g",&dummi1,&hoehe,&dummi2,&dummi3,&dummi4,&dummi5);
        }
                printf("\n\n\n%e",hoehe);
    
        getchar();
        fclose( datei );
        return 0;
    }
    

    jedoch hätt ich noch zwei verständnissfragen:

    1.wenn ich zuletzt "hoehe" mit int bei printf ausgeben lasse (und natürlich alle notwenidgen werte dafür änder) erhalte ich das richitge ergebnis, und wenn ich das mit double mache, erhalte ich immer eine exponentialzahl, was ja eigentlich egal sein sollte für mich, da ich die werte ohnehin nur zum rechen brauche. Aaaaaaber ..mir scheints so als sei die double zahl die ich erhalte nicht die richtige 😞
    2.zum verständnis: mit dem zaehler++ der in der schleife ist werden eigentlich nur die zeilen ausgezählt auf die ich dann zugreife mit ? ist das richtig?? 😕



  • Jepp, zaehler++ soll die mit fgets eingelesenen Zeilen zählen. Du musst aber deinen Code noch ergänzen, weil du auch vor der Schleife fgets aufrufst.
    Nach jedem fgets also ein zaehler++.



  • ist also variante 1 oder variante 2 richtig?

    Variante1:

    fgets( zeile, 99, datei ); 
            zaehler++; 
            if(zaehler == 6) 
            sscanf(zeile,"%g %e %g %g %g %g",&dummi1,&hoehe,&dummi2,&dummi3,&dummi4,&dummi5);
            if(zaehler == 7)
            sscnaf(zeile,"%g %g",&dummi6, &dummi7);
    

    Variante2:

    fgets( zeile, 99, datei ); 
            zaehler++; 
            if(zaehler == 6) 
            sscanf(zeile,"%g %e %g %g %g %g",&dummi1,&hoehe,&dummi2,&dummi3,&dummi4,&dummi5);
            fgets( zeile, 99, datei ); 
            zaehler++; 
            if(zaehler == 7) 
            sscanf(zeile,"%g %g",&dummi6,&dummi7);
    


  • Also ich habe nun Variante ausprobiert und es klappt bloß nun hab ich ein etwas anderen problem ...wemm ich miene Werte als integer deklariere erkennt er bei den größeren über 1000 nur den ersten in einer Zeile. Also hab ichs dann mit double probiert wegen dem exponenten und da erkennt er alle Daten.

    Jedoch!!! schriebt er mir beispielweise für den Wert 4210.00000 (aus der txt Datei) den double Wert 5.76204e-315. Und meine Mahtekenntnisse sagen mir das das nicht das gleiche sien kann 🙄

    kannste mir da vllt weiterhelfen BB?



  • ich hab nunw as probiert und zwar

    i=(int)dummi1;
    

    damit sollte man angeblich aus einem double einen int wert machen,
    klappt bei mri aber nciht da ein anderer wert rauskommt 😞



  • ! schrieb:

    Jedoch!!! schriebt er mir beispielweise für den Wert 4210.00000 (aus der txt Datei) den double Wert 5.76204e-315. Und meine Mahtekenntnisse sagen mir das das nicht das gleiche sien kann 🙄

    ganz klare sache: haste irgendwo nen error, nen bug! 😮


Anmelden zum Antworten