fscanf auslese Problem



  • Lerne mal C Programmieren! Und schau Dir mal die Docus zu den STD Funktionen an. Und informiere Dich wie sie funktionieren, was sie machen und was nicht!
    Dann wird sich Deine Frage von selbst lösen!



  • Es gibt zum einlesen nicht nur fscanf. Das f hinten steht da für formatiert.
    Das vordere f steht für File.

    Da du aber die ganze 1. Zeile einlesen willst nimmst du eine andere Funktion. (steht auch in der stdio.h)

    Es gibt auch sscanf. Mit s vorne für String. Damit kannst du aus einem String die Daten einlesen.

    Daher erst komplette Zeile einlesen und dann auswerten.



  • Meinung! schrieb:

    Lerne mal C Programmieren! Und schau Dir mal die Docus zu den STD Funktionen an. Und informiere Dich wie sie funktionieren, was sie machen und was nicht!
    Dann wird sich Deine Frage von selbst lösen!

    Wow!

    Das ist mir eine Nominierung zum "Schund des Monats" wert! Herzlichen Glückwunsch!



  • Pretty schrieb:

    Meinung! schrieb:

    Lerne mal C Programmieren! Und schau Dir mal die Docus zu den STD Funktionen an. Und informiere Dich wie sie funktionieren, was sie machen und was nicht!
    Dann wird sich Deine Frage von selbst lösen!

    Wow!

    Das ist mir eine Nominierung zum "Schund des Monats" wert! Herzlichen Glückwunsch!

    Warum? Nichs als die Wahrheit!



  • Meinung2 schrieb:

    Warum? Nichs als die Wahrheit!

    Auch die vermeintliche Wahrheit (die sich nach näherer Betrachtung mitunter als simple Meinung eines Individuums und nicht als generelles Faktum herausstellen könnte) ist manchmal bei sich selbst besser aufgehoben.

    Nichtsdestotrotz ist dem Fragensteller wahrscheinlich soweit klar, dass er sich in einem Lernprozess befindet (wie fast alle hier) und gerade deshalb wendet er sich (sinnvollerweise) an (zumeist) fachkundige (und größtenteils freundliche) Artgenossen, um den ein oder anderen Tipp zu erhaschen.

    Wenn Du schon zum RTFM'en ermahnst, poste wenigstens einen adäquaten Link dazu!



  • Pretty schrieb:

    Wenn Du schon zum RTFM'en ermahnst, poste wenigstens einen adäquaten Link dazu!

    Bevor das hier ausartet, hier mal ein Link:

    http://www.cplusplus.com/reference/clibrary/cstdio/fgets/



  • Jab bin grad beim C lernen und zwar mit Hilfe dieser Seite.
    http://www.c-howto.de/tutorial-dateiverarbeitung-formatiertes-lesen-schreiben.html
    Und dort wird der fscanf nicht so ausführlich erklärt.

    Was ich zum Zeilenweisen auslesen mit fscanf in Google gefunden hab hatte mir nicht sehr viel weitergeholfen aber jetzt weis ich auch wieso ich kaum was gefunden habe…

    Vielen Dank für die Hilfe, von euch allen! Auch für den Link, werde mich mal an diese Funktion setzen. Und jetzt habe ich auch denn hier gefunden und werde da mal das "c von a bis z" ausprobieren, wenn das empfohlen wird.
    http://www.c-plusplus.net/forum/134691



  • bleipumpe schrieb:

    Und jetzt habe ich auch denn hier gefunden und werde da mal das "c von a bis z" ausprobieren, wenn das empfohlen wird.

    Nein! Bücher und sonstiger Pfusch vom Autor JW wird hier ausdrücklich NICHT empfohlen aufgrund nachgewiesener Inkompetenz und schlichtweg Vermittlung von falschem Wissen.



  • Ääähm das steht direkt als erstes unter „Linkliste für Neulinge“
    http://www.c-plusplus.net/forum/f10
    und da steht "nur":

    "Edit by TactX: Das Buch "C von A bis Z" ist hier schon öfters wegen diverser Fehler aufgefallen. Dies sollte man im Hinterkopf haben wenn man das Buch liest und entsprechend kritisch hinterfragen (gilt natürlich für jede Veröffentlichung)."

    Was sich aber längst nicht so eindeutig wie deine Aussage anhört.
    Das sollte wohl dann eher gelöscht werden, anstatt vorsichtig daraufhin gewiesen.

    Gibt’s da nicht ein Buch wo ziemlich gut ist einfach aber vor allem ausführlich!? unter dem "Linkliste für Neulinge" sind nur immer wieder Bücher und links eingeworfen und teils sofort wieder kritisiert oder Dead-links etz.

    Besonders hilfreich finde ich diesen "thread" nicht!



  • Tue was du nicht lassen kannst.
    Ich gebe dir aber auf deinen Erfahrungstrip mit, dass nicht immer die Top-Google-Treffer die besten sind.
    Hier im Forum gibt es genügend Beiträge zum Suchen nach brauchbaren Links und meist auch eine Bewertung dazu.



  • Das hast du wohl falsch verstanden ich habe nicht dich gemeint sondern ausschließlich diesen „Linkliste für Neulinge“ Thread.

    Hat mir jemand ein Vorschlag für ein Tutorial o.ä.



  • Ich empfehle dir KEIN Online Tutorial.
    Ich empfehle dir ein Buch (sowas aus Papier zum Umblättern) und dabei:

    Prinz/Prinz: "C - Einführung und professionelle Anwendung"
    

    Und wenn es auch in Englisch sein darf:

    Prata: "C Primer Plus 5th Edition"
    

    Ich weiß nicht, was sich Herr "alt!!1 Unregistrierter" in der Linkliste dabei gedacht hat, den JW Pfusch zu empfehlen, wahrscheinlich hat er auch nur Google befragt.
    Noch weniger verstehe ich, warum dieser offensichtliche Pfusch hier von den Moderatoren implizit empfohlen wird.



  • sowas gibts noch dachte die wären ausgestorben. 😛

    Danke für die buch empfelung, dann werde ich mir die mal zu gemüte ziehen!

    Ich hoffe die kommen mal drauf andere werden sich das bestimmt extra hollen.



  • Moin moin,

    ich sitze gerade mit einem Kommilitonen zusammen über einem Semesterprojekt und stehen vor folgendem Problem ... unser C-Programm funktioniert unter Codeblocks und xcode, allerdings müssen wir noch die Igel.h aus Visual Studio einbinden, sodass es natürlich auch darunter funktionieren muss und genau da ist der Haken.
    Via Breakpoints haben wir schon rausgefunden, dass das Problem bei fscanf liegt, kommen aber einfach nicht auf die Lösung.
    Wäre sehr nett, wenn sich jemand dessen annehmen und uns die Augen öffnen könnte.
    Schonmal vielen Dank im voraus !

    Mit freundlichen Grüßen
    Florian

    void IgelMain()
    	{
    	 //Initialisierung und Deklaration
        FILE *Datei;
        struct Punkt *polygon1, *polygon2, *schnittliste;
    	//testpunkte
    	struct Punkt s1,e1,s2,e2, test2;
    	char stringPfad[300]={}, current, stringPoly[100]={};
        long pos;
        int iWahl=0, wechsel = 0, length1 = -1,length2 = -1, leer1 = 0, leer2 = 0, i, isSchnitt;
        double test = 1.0;
    
    	open_console();
        //Menue
        printf("\n ***********************************\n 
                   I   ------  Hauptmenue  ------    I\n 
                   I                                 I\n 
                   I(1) Schnittflaeche berechnen     I\n 
                   I(2) Programm beenden             I\n 
                   I                                 I\n  
                   ***********************************\n 
                   -> ");
        scanf("%i",&iWahl);
        fflush(stdin);
        if(iWahl==1)
        {
            //Textdatei mit den x- und y-werten der Polygone einlesen
            do
            {
                printf("\nBitte geben Sie den Dateipfad ein: ");
                scanf("%s",&stringPfad[0]); //Dateipfad wird als String in Varaible gespeichert
                Datei=fopen(&stringPfad[0],"r"); // Datei wird im lese-Modus geoeffnet
                if(Datei==NULL) printf("\nDatei leider nicht lesbar, bitte wiederholen Sie Ihre Eingabe !"); //Fehlerausgabe, wenn angegebene Datei nicht vorhanden ist
            }while(Datei==NULL);
    
            //***Einlesen der ersten Zeile der Datei in ein Array aus Punkten.***
            //Länge der ersten Zeile und die Anzahl der Leerzeichen feststellen.
            do{
                current = getc(Datei);
                length1++;
                if(current == 32) leer1++;
            }while(current != 0x0A);
    
            //Pos speichert den Wert des Anfangs der zweiten Zeile von Datei
            pos = ftell(Datei);
            //Dateipointer an den Anfang der Datei setzen
            //rewind(Datei);
    		fclose(Datei);
    		Datei=fopen(&stringPfad[0],"r");
            //Speicherallokation für die Punkte des ersten Arrays und Zuweisung
            polygon1 = (struct Punkt*) calloc((leer1+1)/2,sizeof(struct Punkt));
            for (i = 0; i < ((leer1+1)/2); i++){
                fscanf(Datei,"%s",stringPoly);   [b]//und genau hier liegt dann der Fehler[/b]
                polygon1[i].xvalue = atof(stringPoly);
                fscanf(Datei,"%s",stringPoly);
                polygon1[i].yvalue = atof(stringPoly);
            }
    


  • sicher, dass die datei geöffnet wird?
    btw wäre eine fehlerbeschreibung evtl brauchbar und auch compilerwarnungen etc

    🙂



  • datei wird geöffnet, nur wenn ich die erste zeile, in x- und y- werte getrennt, einlesen will, gibt er mir den fehler expression cannot be evaluated.

    test datei sieht wie folgt aus ...

    123.212 123123.0 123123 123123
    11 22 33 44 11 22 33 44



  • Welche Werte haben denn pos, length1 und leer1?
    Bei welchem i tritt der Fehler auf.

    Und wenn ich das sehe: &stringPfad[0] , dann weiß ich das ihr zwar nachgedacht aber nicht begriffen habt.



  • pos ist an der ersten stelle der zweiten zeile, length1 ist erstmal unwichtig, gibt aber die richtige anzahl aller zeichen der ersten zeile wieder ... leer1 ist die anzahl der leerzeichen und steht auf 3, so wie es soll ...
    wie gesagt, das programm funktioniert nur unter visual studio 2010 nicht

    was das &stringPfad[0] angeht, ich habe das [0] mal entfernt

    edit: und es tritt schon beim ersten Schleifendurchgang auf



  • Mit welchem System habt ihr denn die Textdatei erstellt?
    Schon mal fopen mit "rb" probiert?

    Und &stringPfad[0] ist gleichbedeutend mit stringPfad . Ohne & und []



  • stimmt ... wenn man schon so viele stunden vor dem bildschirm sitzt, erkennt man nicht immer gleich alles 😉

    mit "rb" funktioniert es leider auch nicht und die txt ist mit wordpad erstellt


Anmelden zum Antworten