fscanf gibt Muell aus



  • Hallo,

    Ich tüftle gerade an einem Projekt und möchte mir bei einem Manager-Game etwas arbeit ersparen in dem ich die einzelnen Werte der Spieler einlese und dann die gewünschten Werte berechne und das alles in einer txt Datei ausgebe.
    Bis hier hin klappt auch alles wunderbar.
    Nun möchte ich die zuvor ausgegebenen Werte mit fscanf wieder einlesen um diese dann im Programm weiter bearbeiten zu können. (Damit ich nicht immer alles neu eingeben muss, die Daten in der .txt werden ja gespeichert)

    Allerdings ließt fscanf nur Blödsinn ein.

    Hier der Code:

    #include <stdio.h>
    #include <cstdlib>
    #include <string.h>

    #define ANZAHL 22

    int main() {

    FILE *fp;
    int z[ANZAHL];
    int staerke, form, erfahrung,task,x[ANZAHL],y[ANZAHL],temp;
    float w[ANZAHL],ds_gesamt_sef,sef_wert,ds_staerke,ds_erfahrung,ds_form;
    char e[ANZAHL][50] = {	"Robin Strandhagen(C)","Shawn Sarrazin(S)","Konsta Koivu(S)","Julian von Waldstaetten(V)","Andrew Delage(V)",
    					"David Schmidt(C)","Moritz Lenz(S)","Marco Kaufmann(S)","Chandler Soley(V)","Stephen Gillen(V)",
    					"Thomas Larsen(C)","Tobias Schünemann(S)","Valentin Fritz(S)","Jakob Resetarits(V)","Nico Seger(V)",
    					"Kevin Boehm(G)",
    					"Blake Gale(RS)","Mario Linden(RS)","Christian Gauch(RS)","Nils Lippmann(RV)","Maximilian Leitner(RV)","Simon Gentner(RV)"};
    					
    printf("\nGuten Tag, Headcoach des EHC Blue Bees Linz!\n");
    
    do{
    	
    printf("Was moechten Sie tun?\n\n");
    printf("-SEF-Tabelle ihrer Spieler anlegen? (Geben Sie 1 ein.)\n");
    printf("-Spielerwerte einzelner Spieler aendern? (Geben Sie 2 ein.)\n");
    printf("-Formwerte der Mannschaft anpassen? (Geben Sie 3 ein.)\n");
    printf("-Spieler nach Attributen sortiert anzeigen lassen. (Geben Sie 4 ein.)\n");
    printf("-Programm beenden? (Geben sie ""e"" ein.)\n");
    
    scanf("%2d",&task);
    
    if (task == 1){
    
    printf ("\nGeben Sie die Werte Ihrer Spieler ein.\n");
    printf ("Das Programm berechnet die SEF-Werte und gibt diese in einer Tabelle aus.\n\n");
    
    fp = fopen("SEF-Tabelle.txt", "w");
    	
    if(fp == NULL) {
    printf("Datei konnte nicht geoeffnet werden.\n");
    }
    else {
    
    fprintf(fp, "\n			   SEF-Tabelle\n\n");
    fprintf(fp, "  ¦¦============================¦========¦===========¦======¦==========¦¦\n");
    fprintf(fp, "  ¦¦        Spielername         ¦ Stärke ¦ Erfahrung ¦ Form ¦ SEF-Wert ¦¦\n");
    fprintf(fp, "  ¦¦============================¦========¦===========¦======¦==========¦¦\n");
    
    for (int i=0; i<=ANZAHL-1; i++)
    {
    printf("Spielerwerte von %s:\n", e[i]);
    printf("Staerke: ");
    scanf("%2d", &staerke);
    
    printf("Erfahrung: ");
    scanf("%2d", &erfahrung);
    
    printf("Form: ");
    scanf("%3d", &form);
    
    sef_wert = staerke * 0.6 + erfahrung * 0.2 + form * 0.2;
    printf("SEF-Wert von %s ist: %2.2f\n\n",e[i], sef_wert);
    
    w[i]=sef_wert;
    x[i]=staerke;
    y[i]=erfahrung;
    z[i]=form;
    
    if (form<100){
    	fprintf(fp, "  ¦¦ %-26s ¦   %02d   ¦    %02d     ¦  %-3d ¦   %2.2f  ¦¦\n", e[i],x[i],y[i],z[i],w[i]);
    }
    else{
    	fprintf(fp, "  ¦¦ %-26s ¦   %02d   ¦    %02d     ¦ %-2d  ¦   %2.2f  ¦¦\n", e[i],x[i],y[i],z[i],w[i]);
    }
    
    if (i<ANZAHL-1){
    
    	fprintf(fp, "  ¦¦----------------------------¦--------¦-----------¦------¦----------¦¦\n");
    }
    else{
    	
    	printf("Alle Spielerwerte wurden erfolgreich eingegeben und werden ausgewertet.\n\n");
    	
    	ds_gesamt_sef=(w[0]+w[1]+w[2]+w[3]+w[4]+w[5]+w[6]+w[7]+w[8]+w[9]+w[10]+w[11]+w[12]+w[13]+w[14]+w[15])/16;
    	ds_staerke=(x[0]+x[1]+x[2]+x[3]+x[4]+x[5]+x[6]+x[7]+x[8]+x[9]+x[10]+x[11]+x[12]+x[13]+x[14]+x[15])/16;
    	ds_erfahrung=(y[0]+y[1]+y[2]+y[3]+y[4]+y[5]+y[6]+y[7]+y[8]+y[9]+y[10]+y[11]+y[12]+y[13]+y[14]+y[15])/16;
    	ds_form=(z[0]+z[1]+z[2]+z[3]+z[4]+z[5]+z[6]+z[7]+z[8]+z[9]+z[10]+z[11]+z[12]+z[13]+z[14]+z[15])/16;
    
    	fprintf(fp, "  ¦¦============================¦========¦===========¦======¦==========¦¦\n");
    	fprintf(fp, "  ¦¦        Mittelwert          ¦  %.1f  ¦   %.1f    ¦ %.1f ¦   %2.2f  ¦¦\n",ds_staerke,ds_erfahrung,ds_form,ds_gesamt_sef);
    	fprintf(fp, "  ¦¦============================¦========¦===========¦======¦==========¦¦\n");
    
    }
    }	
    }
    fclose(fp);	
    }
    
    if (task == 2){
    printf("Baustelle!\n");		//Werte aus .txt einlesen und ausgeben im cmd Fenster
    							//anschließend neue Eingabe
    							//zuvor noch auswählen welchen Spieler man ändern will ---- Form
    }
    
    if (task == 3){
    printf("Baustelle!\n");
    
    fp = fopen("SEF-Tabelle.txt", "r");
    
    /*fscanf(fp, "\n			   SEF-Tabelle\n\n");
    fscanf(fp, "  ¦¦============================¦========¦===========¦======¦==========¦¦\n");
    fscanf(fp, "  ¦¦        Spielername         ¦ Stärke ¦ Erfahrung ¦ Form ¦ SEF-Wert ¦¦\n");
    fscanf(fp, "  ¦¦============================¦========¦===========¦======¦==========¦¦\n");*/
    
    for(int i=0;i<=15;i++)
    {
     fscanf(fp, "¦¦%-26s¦%02d¦%02d¦%-3d¦%2.2f¦¦\n", e[i],x[i],y[i],z[i],w[i]);
     //fscanf(fp, "%-3d\n",&temp);
     //fscanf(fp, "%2d\n", z[0]);
     //fread(&temp,sizeof(int),1,fp);
     //fgets(z,1,fp);
     //temp=z[i];
     //printf("Formwert: %d\n", temp);	
    }
    //rewind (fp);
    //fscanf(fp, "  ¦¦----------------------------¦--------¦-----------¦------¦----------¦¦\n");
    	fclose(fp);
    /*printf("\n			   SEF-Tabelle\n\n");
    printf("  ¦¦============================¦========¦===========¦======¦==========¦¦\n");
    printf("  ¦¦        Spielername         ¦ Stärke ¦ Erfahrung ¦ Form ¦ SEF-Wert ¦¦\n");
    printf("  ¦¦============================¦========¦===========¦======¦==========¦¦\n");*/
    
    for(int i=0;i<=15;i++)
    {
    printf("  ¦¦ %-26s ¦   %02d   ¦    %02d     ¦  %-3d ¦   %2.2f  ¦¦\n", e[i],x[i],y[i],z[i],w[i]);
     //printf("%-3d\n",temp);
     //fscanf(fp, "%2d\n", z[0]);
     //fread(&temp,sizeof(int),1,fp);
     //fgets(z,1,fp);
     //temp=z[i];
     //printf("Formwert: %d\n", temp);	
    }
    
    printf("  ¦¦----------------------------¦--------¦-----------¦------¦----------¦¦\n");
    
    //if(fp == NULL) {
    //printf("Datei konnte nicht geoeffnet werden.\n"); 
    //}
    //else {
    	//int i;
    	//z[i]=form;
    	//form = z[i];
    	//for(int i=0; i<=1; i++) {
    //	fscanf(fp, "%2d\n", z[i]);
    	//printf("eingelesener Wert: %2d\n", temp);
    //}	
    
    }
    //}
    if (task == 4){
    printf("Baustelle!\n");
    }
    
    if (task == 'e'){
    break;
    
    }
    
    }while(task='e');
    
    //return 0;
    

    }

    Im Task 1 werden alle Werte eingegeben und die txt Datei erzeugt.
    Im Task 3 soll dann mittels fscanf wieder jeder Wert in die dafür bereitstehenden Arrays eingelesen werden.
    Die Kommentare sind anderer Versuche bzw. teilweise überprüfungen ob ich das Ergebnis ausgelesen bekomme.

    Es ging schon mim einlesen wenn ich nach dem ausführen alle Werte zuerst eingab und dann im selben cmd Fenster wieder alles auslas.

    Ich weiß nicht ob es an fscanf liegt oder wo ich noch einen Fehler haben könnte???

    Hab auch schon über fgets, dann in einzelne Strings zerlegen über strtok und dann in int Werte konvertieren experimentiert. Jedoch scheitert es ebenfalls schon am einlesen der Werte.

    Ich vermute es liegt daran, dass ich nicht mehrere Werte einlesen kann in einer Zeile?

    Würde mich tierisch über hilfreiche Antworten freuen.
    Es geht zwar "nur" um ein privates Projekt und ich kann auch ohne dem Programm leben jedoch hat mich der Ehrgeiz gepackt und ich will es jetzt auch zum laufen bringen!



  • scanf ist nicht printf

    Längenangaben bei den Formatspecifieren sind eigentlich nur bei %s nötig.
    Zudem liest scanf bei %s nur bis zum nächsten Whitespace (z.B. Leerzeichen)
    Darum kannst du Vor- und Nachname nicht mit einem %s einlesen.
    Da bietet sich %[ an.



  • i = 0;
    while(
    5 == fscanf(fp, "%*[^¦]¦¦%49[^¦]¦%d%*[^¦]¦%d%*[^¦]¦%d%*[^¦]¦%f%*[^¦]¦¦", e[i],&x[i],&y[i],&z[i],&w[i])
    )
    ++i;
    

    ungetestet; den String musst du anschließend noch trimmen



  • Reicht hier statt der ganzen %*[^¦] im Formatstring nicht jeweils ein Leerzeichen aus?
    Denn dort stehen ja nur Leerzeichen, wenn ich das im Code vom TO richtig gesehen habe.

    " ¦¦ %49[^¦]¦%d ¦%d ¦%d ¦%f ¦¦"



  • Wieso sollte zum Überlesen eines "|" ein Leerzeichen im Format ausreichen? Wenn dann ein %*s, mein Vorschlag hat aber den Anspruch, genau das beschriebene Format aus einer Zeile zu erkennen und nicht ein ähnliches.

    Für das Multiline-Problem ('\n' als Line-Separator ist ebenso ein whitespace und kann nur aufwändig ggü. den anderen Feldseparatoren extrabehandelt werden) würde ich sowieso fgets+sscanf vorziehen, etwa

    
    char z[1000];
    int i = 0;
    while( fgets(z,1000,fp) )
    if (5 == sscanf(z, "%*[^¦]¦¦%49[^¦]¦%d%*[^¦]¦%d%*[^¦]¦%d%*[^¦]¦%f%*[^¦]¦¦", e[i],&x[i],&y[i],&z[i],&w[i])) ++i;
    
    

    Das müsste dann wie gewünscht alle Zeilen im passenden Format finden und die Werte zuweisen.



  • @wutz sagte in fscanf gibt Muell aus:

    Wieso sollte zum Überlesen eines "|" ein Leerzeichen im Format ausreichen?

    Hab ich das behauptet?

    Das Format in der Datei wird doch mit
    fprintf(fp, " ¦¦ %-26s ¦ %02d ¦ %02d ¦ %-3d ¦ %2.2f ¦¦\n", e[i],x[i],y[i],z[i],w[i]);
    festgelegt.

    Vor den || kommen nur Leerzeichen. Kann man mit einem Whitespace im Formatstring überlesen.
    Zwischen den | und den Werten sind Leerzeichen. Werden von den Formatspecifieren %d und %f überlesen, bzw. mit einem Leerzeichen vor %[
    Zwischen den Werten und den | sind auch nur Leerzeichen. Kann man mit einem Whitespace im Formatstring überlesen.



  • Vielen Dank für die Hilfe, allerdings steh ich grad am Schlauch....

    if (task == 3){
    printf("Baustelle!\n");

    fp = fopen("SEF-Tabelle-Test.txt", "r");
    
    //char z[1000];
    //int i = 0;
    //fgets(z,1000,fp);
    for(int i=0;i<=15;i++)
    {
    fscanf(fp, "%*[^¦]¦¦%49[^¦]¦%d%*[^¦]¦%d%*[^¦]¦%d%*[^¦]¦%f%*[^¦]¦¦", e[i],&x[i],&y[i],&z[i],&w[i]);	
    //i = 0;
    //while(
    //5 == fscanf(fp, "%*[^¦]¦¦%49[^¦]¦%d%*[^¦]¦%d%*[^¦]¦%d%*[^¦]¦%f%*[^¦]¦¦", e[i],&x[i],&y[i],&z[i],&w[i])
    //)
    //++i;
    
    }
    
    
    for(int i=0;i<=15;i++)
    {
    
    printf("Werte: %d und %f\n",z[i],w[i]);
    }
    
    fclose(fp);
    

    }

    Das wär so der Code-Schnipsel wie es für mich logisch ist.
    Zuerst wird in der For-Schleife jede Zeile eingelesen
    und danach im cmd Fenster mit der zweiten For-Schleife wieder ausgegeben.

    Was mache ich immernoch falsch? 😕



  • Jede Zeile meines letzten Tipps hat ihre Berechtigung, wenn du die ausklammerst brauchst du dich nicht zu wundern.



  • Ich würde an deiner Stelle dieses Problem nicht lösen, wenn dein Ziel ist ein Manager Game zu programmieren. fscanf ist auf Dauer zu unflexibel und du solltest daher deine Zeit lieber investieren etwas Sinnvolles zu lernen, wie z.B. eine xml oder json Library. Zum Beispiel sowas wie http://rapidjson.org/ soll ganz gut sein.

    Was Anderes ist natuerlich wenn du eigentlich ein paar Funktionen aus der C Library kennenlernen willst oder dein Ziel ist selbst irgendwann von Hand einen kompletten Parser zu schreiben.



  • @sour-fox

    scanf läßt Zeichen, mit denen es nichts anfangen kann, im Eingabestrom stehen.

    Wenn eine Zahl gelesen werden soll, und da ist z.B. dann liest scanf nicht weiter.
    Darum ist es wichtig, den Rückgabewert von scanf zu beachten.
    Wenn der in deinem Fall ungleich 5 ist, ist ein Fehler aufgetreten. Dann lohnt sich das weitere einlesen nicht mehr.
    Oder halt fgets und sscanf, dann klappt es vielleicht in der neuen Zeile.



  • warum schreibst du nicht einfach die zahlenwerte ohne irgendwelche sonderzeichen in die datei?



  • scanf() ist sch* unflexibel, Fehler extrem schwer und aufwendig abzufangen und Wutz hat schon recht - nur, warum tust du dir das an?
    Weil hirnrissig der beste Weg ist, aufs Maul zu fliegen?
    Du hast eine fest vorgegebene Struktur? Erinnert dich das nicht an das Zauberwort "struct"? Du schreibst ja den Kram selbst, hast die Kontrolle darüber, was du schreibst und liest.
    Also struct basteln und binary schreiben/lesen. Du wirst noch genug "Spaß" haben, die Ausgabe zusammenzuschustern.

    Und wenn du schon scharf darauf bist, Runtime und Speicher sinnlos zu verbraten, nähere dich doch bitte über was Simples wie CSV, bis du weißt, was genau deine stdio.h tut. Ich weiß nicht, ob die Implementation der Lib standardisiert ist, meiner Erfahrung nach tendiere ich zu "nicht" - es kommt halt raus, was rauskommt. Portabel ist iwie anders.



  • @sarkast sagte in fscanf gibt Muell aus:

    Also struct basteln und binary schreiben/lesen.

    Gerade das ist

    hirnrissig der beste Weg ist, aufs Maul zu fliegen

    Da nicht portabel und auch schlecht zu kontrollieren.

    @sarkast sagte in fscanf gibt Muell aus:

    Und wenn du schon scharf darauf bist, Runtime und Speicher sinnlos zu verbraten, nähere dich doch bitte über was Simples wie CSV,

    Hat er doch. CSV sind doch "Character-Separated Values". Nur ist der Character hier ein | und kein , oder ;
    Das Problem bleibt also das Gleiche.

    Solange kein Mensch in den Dateien rumfummelt, kann man das mit scanf problemlos lesen - wenn man weiß, was man tut.



  • @dirkb sagte in fscanf gibt Muell aus:

    Solange kein Mensch in den Dateien rumfummelt,

    Nicht ganz, die Datei ist auch hinueber, sobald man was an Daten anfuegt, entfernt oder in der Reihenfolge ändert. Und das dürfte in der Entwicklung eines Spiels recht oft passieren. Aber diese Probleme wurde alle schon gelöst, warum das Rad neu erfinden?



  • @wutz Sind ausgeklammert da dein Vorschlag auch nicht das gewünschte einlaß

    Hab jetzt kapiert was ich falsch gemacht hab.

    Nur hab ich eine Frage:

    if (task == 3){
    printf("Baustelle!\n");

    fp = fopen("SEF-Tabelle-Test.txt", "r"); // öffnen der Datei zum lesen
    
    char z[1000];    //Wofür deklariert man dieses Array?
    int i = 0;
    while( fgets(z,1000,fp) ) //while Schleife mit fgets, läuft bis keine weitere Zeile mehr in der txt Datei steht?
    if (5 == sscanf(z, "%*[^¦]¦¦%49[^¦]¦%d%*[^¦]¦%d%*[^¦]¦%d%*[^¦]¦%f%*[^¦]¦¦", e[i],&x[i],&y[i],&z[i],&w[i])) //Warum dieses 5== ? 
    printf("Werte: %d und %f\n",z[i],w[i]);
    
    ++i;
    
    fclose(fp);
    

    }

    Kann mir das was das Programm macht jemand in worte fassen, bitte?
    Ich versteh nicht wieso ich das fgets und das sscanf nicht in eine for-Schleife verpacken kann?



  • Wenn ich es so schreibe, wie es für mich sinn macht bzw. ich denke zu verstehen was ich der Reihe nach mache im Programmablauf lest es falsche Werte ein .....

    if (task == 3){
    printf("Baustelle!\n");

    fp = fopen("SEF-Tabelle-Test.txt", "r");
    
    char z[1000];
    int i = 0;
    
    for (int i=0; i <= ANZAHL; i++)
    {
    	fgets(z,1000,fp);
    	sscanf(z, "%*[^¦]¦¦%49[^¦]¦%d%*[^¦]¦%d%*[^¦]¦%d%*[^¦]¦%f%*[^¦]¦¦", e[i],&x[i],&y[i],&z[i],&w[i]);
    }
    //while( fgets(z,1000,fp) )
    //if (5 == sscanf(z, "%*[^¦]¦¦%49[^¦]¦%d%*[^¦]¦%d%*[^¦]¦%d%*[^¦]¦%f%*[^¦]¦¦", e[i],&x[i],&y[i],&z[i],&w[i])) 
    for (i = 0; i <= ANZAHL; i++)
    {
    	printf("Werte: %d und %f\n",z[i],w[i]);
    }
    
    
    //++i;
    
    fclose(fp);
    

    }



  • @sour-fox sagte in fscanf gibt Muell aus:

    //Wofür deklariert man dieses Array?

    Das Array wird sogar definiert (nicht nur deklariert)
    Irgendwohin muss fgets die Daten ja schreiben.

    @sour-fox sagte in fscanf gibt Muell aus:

    //Warum dieses 5== ?

    Der Rückgabewert von sscanf wird mit 5 verglichen.

    Schaust du bei einer Referenz zu scanf nach. z.B. bei http://www.cplusplus.com/reference/cstdio/scanf/ unter Return Value

    fgets hat übrigens auch einen Rückgabewert, den man auf Fehler überprüfen kann.

    Du kannst in der Einleseschleife auch eine Kontrollausgabe von z machen machen.

    Um die besser helfen zu können, wäre die Datei, die du einlesen möchtest nicht schlecht.
    Und eine genauere Angebe des Fehlers.

    Ach und schau mal im Edit.-Fenster (da wo du die Beiträge schreibst) oben rechts in der Ecke. Da steht VERFASSEN und ein ?.
    Dort steht, wie du Text und Code formatieren kannst.
    Z.B. für Code die drei Backticks ```



  • @dirkb sagte in fscanf gibt Muell aus:

    Z.B. für Code die drei Backticks ```

    Code markieren und auf </> klicken.



  • @swordfish sagte in fscanf gibt Muell aus:

    @dirkb sagte in fscanf gibt Muell aus:

    Z.B. für Code die drei Backticks ```

    Code markieren und auf </> klicken.

    Cool



  • @dirkb Die einzulesende Datei wird vorher erstellt und sieht dann zum Beispiel so aus:

    SEF-Tabelle

    ¦¦============================¦========¦===========¦======¦==========¦¦
    ¦¦ Spielername ¦ Stärke ¦ Erfahrung ¦ Form ¦ SEF-Wert ¦¦
    ¦¦============================¦========¦===========¦======¦==========¦¦
    ¦¦ Robin Strandhagen(C) ¦ 21 ¦ 21 ¦ 95 ¦ 35.80 ¦¦
    ¦¦----------------------------¦--------¦-----------¦------¦----------¦¦
    ¦¦ Shawn Sarrazin(S) ¦ 16 ¦ 25 ¦ 96 ¦ 33.80 ¦¦
    ¦¦----------------------------¦--------¦-----------¦------¦----------¦¦
    ¦¦ Konsta Koivu(S) ¦ 15 ¦ 25 ¦ 95 ¦ 33.00 ¦¦
    ¦¦----------------------------¦--------¦-----------¦------¦----------¦¦
    ¦¦ Julian von Waldstaetten(V) ¦ 19 ¦ 18 ¦ 95 ¦ 34.00 ¦¦
    ¦¦----------------------------¦--------¦-----------¦------¦----------¦¦
    ¦¦ Andrew Delage(V) ¦ 21 ¦ 19 ¦ 95 ¦ 35.40 ¦¦
    ¦¦----------------------------¦--------¦-----------¦------¦----------¦¦
    ¦¦ David Schmidt(C) ¦ 21 ¦ 18 ¦ 95 ¦ 35.20 ¦¦
    ¦¦----------------------------¦--------¦-----------¦------¦----------¦¦
    ¦¦ Moritz Lenz(S) ¦ 14 ¦ 16 ¦ 95 ¦ 30.60 ¦¦
    ¦¦----------------------------¦--------¦-----------¦------¦----------¦¦
    ¦¦ Marco Kaufmann(S) ¦ 15 ¦ 19 ¦ 95 ¦ 31.80 ¦¦
    ¦¦----------------------------¦--------¦-----------¦------¦----------¦¦
    ¦¦ Chandler Soley(V) ¦ 15 ¦ 26 ¦ 99 ¦ 34.00 ¦¦
    ¦¦----------------------------¦--------¦-----------¦------¦----------¦¦
    ¦¦ Stephen Gillen(V) ¦ 15 ¦ 27 ¦ 95 ¦ 33.40 ¦¦
    ¦¦----------------------------¦--------¦-----------¦------¦----------¦¦
    ¦¦ Thomas Larsen(C) ¦ 15 ¦ 29 ¦ 99 ¦ 34.60 ¦¦
    ¦¦----------------------------¦--------¦-----------¦------¦----------¦¦
    ¦¦ Tobias Schünemann(S) ¦ 15 ¦ 19 ¦ 72 ¦ 27.20 ¦¦
    ¦¦----------------------------¦--------¦-----------¦------¦----------¦¦
    ¦¦ Valentin Fritz(S) ¦ 12 ¦ 11 ¦ 96 ¦ 28.60 ¦¦
    ¦¦----------------------------¦--------¦-----------¦------¦----------¦¦
    ¦¦ Jakob Resetarits(V) ¦ 17 ¦ 15 ¦ 94 ¦ 32.00 ¦¦
    ¦¦----------------------------¦--------¦-----------¦------¦----------¦¦
    ¦¦ Nico Seger(V) ¦ 16 ¦ 13 ¦ 97 ¦ 31.60 ¦¦
    ¦¦----------------------------¦--------¦-----------¦------¦----------¦¦
    ¦¦ Kevin Boehm(G) ¦ 20 ¦ 18 ¦ 94 ¦ 34.40 ¦¦
    ¦¦----------------------------¦--------¦-----------¦------¦----------¦¦
    ¦¦ Blake Gale(RS) ¦ 15 ¦ 24 ¦ 54 ¦ 24.60 ¦¦
    ¦¦----------------------------¦--------¦-----------¦------¦----------¦¦
    ¦¦ Mario Linden(RS) ¦ 15 ¦ 30 ¦ 62 ¦ 27.40 ¦¦
    ¦¦----------------------------¦--------¦-----------¦------¦----------¦¦
    ¦¦ Christian Gauch(RS) ¦ 15 ¦ 21 ¦ 58 ¦ 24.80 ¦¦
    ¦¦----------------------------¦--------¦-----------¦------¦----------¦¦
    ¦¦ Nils Lippmann(RV) ¦ 15 ¦ 16 ¦ 70 ¦ 26.20 ¦¦
    ¦¦----------------------------¦--------¦-----------¦------¦----------¦¦
    ¦¦ Maximilian Leitner(RV) ¦ 12 ¦ 09 ¦ 100 ¦ 29.00 ¦¦
    ¦¦----------------------------¦--------¦-----------¦------¦----------¦¦
    ¦¦ Simon Gentner(RV) ¦ 15 ¦ 41 ¦ 67 ¦ 30.60 ¦¦
    ¦¦============================¦========¦===========¦======¦==========¦¦
    ¦¦ Mittelwert ¦ 16.0 ¦ 19.0 ¦ 94.0 ¦ 32.84 ¦¦
    ¦¦============================¦========¦===========¦======¦==========¦¦

    Das wird in eine txt. Datei gespeichert und ich möchte dann danach die Werte wieder einlesen.
    Warums mir das jetzt mit STRG+C und STRG+V falsch formatiert ausgibt weis ich nicht.....

    Mein Problem ist, dass ich nicht verstehe wie ich mit fgets und sscanf über eine For-Schleife einlesen kann, so dass die richtigen Werte eingelesen werden und nicht irgendwas eingelesen wird.

    Wie gesagt, mit der Lösung von @Wutz klappt es.
    Nur möchte ich es irgendwie in eine For-Schleife verpacken (da mir das besser gefällt und ich eher nachvollziehen kann als mit dieser Vergleich-Variante)


Anmelden zum Antworten