[C] int ziffernweise einlesen?!


  • Mod

    Nenn mal dein genaues Format!

    Zu dem, was du nun gezeigt hast, würde

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

    passen: http://ideone.com/8h1sUl



  • Danke für deine Hilfe!

    Die Datei aus der ich später einlesen werde, wird so aussehen:

    G4821 H8583 X19292 Y91921
    G3821 H8883 X19252 Y97921
    G3821 H8283 X19392 Y92921
    G5821 H8783 X19692 Y95921
    G6821 H8683 X19292 Y93921
    G7821 H8453 X19292 Y91321

    Ich muss jetzt hier 24 Zahlen 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