Forum: PC-Programmierung sscanf string


von .... (Gast)


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.

von Klaus W. (mfgkw)


Lesenswert?

.... schrieb:
> Gebe ich allerdings "setconfig 1 45 10" ein dann ist der String
> userInput nach dem auswerten mit sscanf leer.

nein.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Bei mir tut's. Ich musste allerdings noch ein main um dein Codefragment
drumherum bauen. Da wirft natürlich die Frage auf, ob dein Fehler nicht
vielleicht in dem Codeteil steckt, den du nicht gepostet hast ;-)

von Klaus W. (mfgkw)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.