[C] int ziffernweise einlesen?!
-
Hallo,
gibt es eine Möglichkeit eine Zahl(int) ziffernweise einzulesen?
Ich habe sowas in der Art:
xcv2939 v4939
Ich möchte nach dem v die 2939 einlesen und in eine Variable speichern und
die 4939 möchte ich einlesen und in eine Variable vom Typ int speichern.Geht das? Wenn ja, wie?
LG
Max
-
Wo willst du da jetzt warum ziffernweise einlesen? Das ginge zwar (Ziffern sind Zeichen, somit ist ziffernweise = zeichenweise), aber das was du beschreibst ist doch das ganz normale, vollständige Einlesen eines ints.
scanf("xcv%i v%i", &int1, &int2);
-
Danke für deine Antwort!
Wie ginge das wenn die Daten über mehre Zeilen verteilt wären?
Also z.B.:
vsx39393
ds2323
dd2322Ich brauche nur die Zahlen und nicht die Buchstaben
-
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 Y91321Ich 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.