sscanf string in float array

Hallo,

ich habe ein Problem... und zwar möchte ich aus der input-Zeile
zB ("101 0 0 9 5.4000e+01 0.0000+e01 3.5000e+02")

den ersten und die letzten 3 Werte ,also 101, 5.4000e+01,0.0000+e01 und 3.5000e+02, einzeln abspeichern.

Meine Überlegung war, dass ich mir ein float array erzeuge der Größe 7
und die Werte darin abspeichere.
Jedoch gelingt mir dies nicht mit einer Schleife, denn nun steht nur der erste Wert 7 mal im Array.

float valueArr[7];
int i;
for(i = 0; i < 7; ++i)
{
sscanf(input, "%f", &valueArr[i]);
}

wenn ich es jedoch per Hand mache.

also

sscanf(input, "%f ... %f", &value[0],...,&value[6]);
funktioniert es.

Was mache ich bei der Schleife falsch?


Oder gibt es allgemein eine bessere Lösung, anstatt alle Werte in einem Array abzuspeichern, weil ich nur den 1. und die letzten 3 Werte benötige?

Danke!
Das Problem ist, dass sscanf bei jedem Durchlauf wieder von vorne anfängt.

Besser wäre es einen stream zu benutzen, der sich seine aktuelle Position merkt
achso. okay

könnte man das auch irgendwie machen. dass wenn sscanf die erste Zahl eingelesen hat , ich mir den rest vom String ( also alles hinter der eingelesen Zahl speichere und das dann wiederum mein input ist)

also i-wie sowas wie:

char input[255];
char HilfStr [255];
float valueArr[7];
int i;
for(i = 0; i < 7; ++i)
{
sscanf(input, "%f", &valueArr[i]);
hilfStr = strstr(input,valueArr[i]);
input = hilfStr;
}

Man könnte auch strchr benutzen. Siehe:

http://www.cplusplus.com/reference/cstring/strchr/

Das sähe dann so aus:
1
2
3
4
5
6
7
8
9
10
11
12
13
char input[255];
char *HilfStr =  input; // Achtung
float valueArr[7];
int i;
for(i = 0; i < 7; ++i)
{
sscanf(HilfStr, "%f", &valueArr[i]); // Achtung
HilfStr = strstr(HilfStr, " "); // Achtung
if(HilfStr) // Wenn kein Leerzeichen gefunden wurde
  ;
else
  break;
}
Danke für die Antwort.

Leider wird bei mir überall noch die 101 eingetragen.
Ich vermute, dass es daran liegt, dass es keine Leerzeichen zwischen den einzelnen Zahlen sind, sondern einfach "whitespaces".

Ich glaub ich werde bei der "per Hand" Methode bleiben. ist am einfachsten.
Wenn die Anzahl nicht dynamisch ist, spricht nichts dagegen das so zu implementieren.

Übrigens: mit scanf() (mit unterliegendem stream/Datei) wäre der ursprünglich Ansatz möglich
Topic archived. No new replies allowed.