Probleme mit Auslesen!!



  • ich werds gleich probieren!



  • edm schrieb:

    Muss es nicht

    [cpp]
    sscanf (line, "%lf", &fconf);
    [/cpp]

    Nein. So muss es bei einem double aussehen, davon war aber keine Rede.



  • kann ich ein fscanf aus einem fgets auch machen ?!?



  • wenn ich

    fgets (line, 100, stream);    //eine zeile einlesen
    
    fscanf (line, "%s", &fconf);  //den 1 wert aus der zeile einlesen
    

    mache, dann schreibt er 'cannot convert char [100] into struct_iobuf'

    das char[100] is line
    aber stört ihn da an diesem befehl ?!? 😕



  • fscanf erwartet als ersten Parameter den Stream. Also entweder du nimmst sscanf oder du ersetzt line durch stream.
    Und was soll "%s" als Formatstring? Ich dachte fconf ist ein float. 😕



  • ja aber wenn ich mit sscanf aus der zeile auslese, dann wird immer nur der 1 wert aus der zeile ausgelesen

    steht jetzt in line '20.000 50.000' drin, dann wird, egal wieviel sscanf ich mache immer nur 20.000 ausgelesen.
    kann man sich irgendwie merken an welcher stelle man ausgelesen hat?!? 😕



  • Wenn du weisst, dass du 2 Werte einlesen willst, warum machst du das dann nicht einfach?

    sscanf(line, "%f %f", &fconf1, &fconf2);
    


  • ist es möglich an denn letzten eingelesen wert in der line variable zu 'springen' ?

    auch wenn line [200] ist aber nur 50 zeichen eingelesen worden sind möchte ich die letzte eingelesen zahl haben ( z.b. 4.44 )



  • weiß keiner wie man sich in einem string bewegt ?!



  • Du könntest zB durch den String gehen, und dir das letzte Whitespace Zeichen (isspace) merken. Der nachfolgende Teilstring ist dann der letzte Wert.

    Oder du lässt sscanf in einer Schleife laufen, bis kein Wert mehr eingelesen wird. ZB

    char line[] = "20.000 50.000 100.000";
    //...
    float f;
    int i = 0, n;
    while (sscanf(&line[i], "%f%n", &f, &n) == 1)
    	i += n;
    // f hat jetzt den letzten Wert der Zeile
    


  • hey es funktioniert..
    aber was macht der befehle genau ?

    while (sscanf(&line[i], "%f%n", &f, &n) == 1)
        i += n;
    

    thx



  • Befehle gibts nicht, das ist einfach 'ne kopfgesteuerte Schleife.

    sscanf(&line[i], "%f%n", &f, &n) == 1
    

    ist die Schleifenbedingung, dh solange der Ausdruck wahr ist, läuft auch die Schleife.

    i += n;
    

    wird entsprechend bei jedem Schleifendurchlauf ausgeführt.

    &line[i]
    

    liefert einen Zeiger auf ein Zeichen in line, welches durch i indexiert wird. Somit kannst du bestimmen, ab welcher Position sscanf zu lesen anfängt.
    "%f%n" - %f liest ein float (in f) und %n speichert die bis dahin gelesenen Zeichen ab (in n).

    Wenn dir die Vorgehensweise immer noch nicht klar ist, dann geh einfach mal jeden Schleifendurchlauf gedanklich durch, und schreib dir auf, welche Werte jede Variable bei welchem Durchlauf hat.



  • hi!
    die obrige schleife funktioniert einwandfrei. ich bräuchte jetzt aber eine gleiche schleife die aber z.b. jetzt die letzten 8 oder die letzten 4 einliest.....
    kann mir wer einen tipp geben wie das geht ?!? 😕

    thx



  • einfach genau diese schleife

    char line[] = "20.000 50.000 100.000";
    //...
    float f;
    int i = 0, n;
    while (sscanf(&line[i], "%f%n", &f, &n) == 1)
        i += n;
    // f hat jetzt den letzten Wert der Zeile
    

    nur für 8 oder 4 werte......bitte um dringende hilfe

    thx


Anmelden zum Antworten