[C] int ziffernweise einlesen?!



  • Ich muss in 24 verschiedene Variablen einlesen



  • Max2 schrieb:

    Ich muss in 24 verschiedene Variablen einlesen

    Da bietet sich ein Array an. Und eine Schleife.



  • Ja, ich habs mit einem Array und einer Schleife versucht zu lösen.
    habe mit fscanf es probiert und es klappt nicht



  • Maxx2 schrieb:

    und es klappt nicht

    Erwartest du jetzt, dass dir jemand sagt was du falsch gemacht hast?

    Zeig deinen Code! (Minimal und Vollständig)



  • Ich kriege leider die Ziffern nicht eingelesen. Das Programm liest nichts ein.
    Könnte mir bitte jemand weiterhelfen? Die Datei aus der ich lesen will ist oben.
    Ich brauche nur die Zahlen.
    Den Code unten habe ich nur experimentell erstell, um zu testen, ob das Programm irgendetwas einliest. Aber es klappt nicht.

    [code="c"]
    while((fscanf(fp,"[^A-Z]%*[1234567890]%d",&ops_line_arr[i].x) == 1))
    i++;



  • Du hast da nicht den Formatstring von SeppJ.

    Wenn du den Formatstring nicht verstehst, solltest du nicht daran rumspielen.



  • SeppJ schrieb:

    scanf("%*[^1234567890]%i", &my_int);
    

    Ich wusste nicht, daß regex mit scanf möglich ist. Ziemlich cool. Ach was - extrem cool.



  • EOP schrieb:

    SeppJ schrieb:

    scanf("%*[^1234567890]%i", &my_int);
    

    Ich wusste nicht, daß regex mit scanf möglich ist. Ziemlich cool. Ach was - extrem cool.

    Das ist kein Regulärer Ausdruck. Das ist 'nur' ein Scanset und betrifft auch nur die Zeichen zwischen den [].

    Und das schon seit C89 (zumindest steht es im Link zum C89 Standard in der Linkliste für Neulinge: https://www.c-plusplus.net/forum/300567 )

    Der Formatspecifier steht als [ in der Übersicht.



  • @Max3
    Der Formatstring von SeppJ "%[^1234567890]%i" bedeutet:
    - lese alle Zeichen ausser den Ziffer ein ( %[^1234567890] )
    - speichere diese aber nirgends ab (der * bei %
    [ )
    - danach lese ein Integer ein ( %i)

    Das %i ist eine mögliche Fehlerquelle, wenn die Zahl führende Nullen hat.

    Dein Formatstring "[^A-Z]%[1234567890]%d" bedeutet:
    - überlese genau die Zeichenfolge ohne Interpretation [^A-Z]
    -- gibt es bei dir nicht
    - dann lese alle Ziffern ein und speichere die nirgends ab ( %
    [1234567890] )
    - danach lese ein Dezimalinteger ein ( %i )
    -- würde nur funktionieren wenn zwischen den ersten Ziffern und deiner gesuchten Zahl ein Whitespace oder ein Vorzeichen +- wäre.

    Dein Text könntealso so ausssehen:
    [^A-Z]123 4567 [A-Z]1234+56789[A-Z]0123-4567 [^A-Z]1 2



  • Danke für die Erklärung DirkB.


Anmelden zum Antworten