sscanf string

Gast #2238345
Lesenswert?

Hallo,
irgendwie komme ich bei der Benutzung von sscanf nicht klar.
Ich erhalte z.B einen String "setconfig 1 45 10" oder "setslavestate 1 
32 ex" und möchte ihn aufteilen in string, zahl, zahl, string.

Folgendes Programm habe ich:
1
char userInput[25];
2
char commandInput[15];
3
char configParameter[10];
4
unsigned int parameterValue, parameter;
5

6
fgets(userInput, 25, stdin);
7

8
// Eingabe: setconfig 1 45 10
9
sscanf(userInput, "%s %u", commandInput, &parameter);
10

11
printf("%s",userInput);
12
// Ausgabe: (nichts)
13

14
// kann den string nicht auf einmal auswerten dazwischen wird noch anderer code ausgeführt
15

16
sscanf(userInput, "%*s %*u %u %s", &parameterValue, configParameter);

Denn Eingabestring userInput würde ich gerne später noch weiter 
benutzen.
Wenn ich jetzt z.B. "setconfig" eingebe steht auch nach dem auslesen mit 
sscanf noch "setconfig" in dem string userInput.
Gebe ich allerdings "setconfig 1 45 10" ein dann ist der String 
userInput nach dem auswerten mit sscanf leer. Was in dem String ist 
überprüfe ich mit dem printf nach dem ersten sscanf.
Kann mir jemand kurz auf die Sprünge helfen was ich falsch mache.Erkenne 
den Fehler gerade nicht.
Danke.
#2238477
Lesenswert?

Generell sollte man den Rückgabewert der scanf-Funktionen beachten.
Der sagt nämlich, wieviele der %-Direktiven geklappt haben. Besonders, 
wenn man eine Benutzereingabe liest.

Zweitens sollte man die Leerzeichen im Formatstring weglassen; 
Leerzeichen werden sowieso überlesen.

Drittens kann man mit einer Direktive (%n) die Anzahl der bisher 
gelesenen Zeichen der Eingabe hinterlegen lassen.
Das kann man nutzen, um nach dem ersten Lesen zu merken, wieweit man 
schon im String war, um später entsprechend weiter hinten weiter machen 
zu können.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren