String auf Zahlen überprüfen. Wie geht das?

ich habe den code schon mehrmals gepostet und das ergebnis hatte ich weiter oben schon mal breit und deutlisch geschilder! Du kannst jetzt von mir nicht tausendmal verlangen, das ich das selbe immer und immer wieder neu ansage. Ließ bitte oben!

Ich verschwende gerade nur meine Zeit damit alles so zu schreiben, wie Ihr es nur verstehen wollt bzw. verstehen könnt. Gute nacht!
 
Ein Leerzeichen ist eben was anderes wie ein =.
Leerzeichen gehören für nicht zu %s dazu.

Zerlegs doch einfach manuell, dann gibts keine Probleme mit irgendwelchen Funktionen...

Unter Voraussetzung, dass wirklich ein = in option drin ist:
C++:
char option[...];
int zahl=0;
while(option[zahl]!='=')zahl++;
option[zahl]='\0';
sscanf(&option[++zahl],"%d",&zahl);
Jetzt ist der Buchstabenteil in option übrig, und die Zahl in zahl. Fertig.
 
Du postest vor allem nichtssagende Codefragmente, momentan funktioniert dein Code schon deshalb nicht, weil du einen Nullzeiger verwendest (es steht nirgendwo ein Code, dass das jetzt anders ist).

Es ist aber schön zu hören, dass du deine Zeit verschwendest. Es kommt einem allgemein auch in deinen anderen Postings so vor als gehst du mal von einer grundsätzlichen Bringschuld unsererseits aus dir helfen zu müssen - und zwar haargenau so wie du es haben willst, kein bisschen anders. Das solltest du überarbeiten, denn du liegst damit komplett daneben.

Dann auch dir mal eine gute Nacht und viel Erfolg beim Lösen deines Problems (Hinweis: Das exakte und ausführliche Lesen der Referenz hätte dir aufgezeigt, dass du mit sscanf auf dem Holzweg bist (Wink mit dem Zaunpfahl: "Wie du aber nun dein "-w=5" in den Teil "-w=" und 5 via sscanf aufteilst wurde dir mittlerweile des Langen und Breiten erklärt.", es wurde nämlich gezeigt, dass du kein passendes Pattern findest)).
 
Ich glaube aber jetzt machst du dich lächerlich Muepe32! Denn auf dem Holzweg bin ich nicht mit dem was ich vorhatte!

Zitat von : http://www.cl.uni-heidelberg.de/kurs/skripte/prog2/html/page026.html

Will man per sscanf Strings in Teilstrings zerlegen, muss man wie immer aufpassen, dass die Zielstrings nicht überlaufen. Deshalb muss bei der Verwendung von %s bei allen scanf-Varianten immer die Länge angegeben werden, und zwar eins weniger als die Länge des Strings, in den eingelesen wird (die ’[0’ braucht ja auch Platz). Bekommt man etwa Eingabe der Art key = value, wobei key keinen Whitespace enhält, vor dem = mindestens ein Whitespace kommt und value, sagen wir, eine Dezimalzahl ist, so ließe sich das so parsen:

#define MAXKEYLEN 20
...
char key[MAXKEYLEN];
int value;

/* Warning: Magic 19 here is MAXKEYLEN-1 ! */
sscanf(str, "%19s = %d", key, &value);

und genau das wolle ich mit -w=3 machen und nichts anderes!
Ich bin bis jetzt nie davon ausgegangen das mir irgend einer eine Brinschlud nötig ist. Mich regt nur auf, das man hier ständig Haarspalterei bereibt wie und was man zusagen hat. Ich schreibe meinen Code immer selber. Wenn ich ein Problem habe will ich von keinem hier irgend eine Lösung haben sondern lediglich einen Anreitz bekommen um selber die Lösung zu erarbeiten. Aber bei den ständigen Vorbeirederei man vom eigentlichen Problem weit abkommt. Wenn du also der Meinung bist mir immer eine Bringschuld zuerweisen und das auch für alle Anderen behaupten kannst, dann antworte mir doch nicht mehr, noch dazu, dass ich mit Dir Spanisch rede!

Sheel-> den String den ich zerlegen wollte, kommt von argv[1] und beinhaltet keine Blanks!

cu
 
Zuletzt bearbeitet:
Zu deinem Zitat: Da gehts doch hauptsächlich um die Maximallänge des Strings.
Die ist zwar auch wichtig, war aber nie Thema unserer netten Diskussion hier.

Was du scheinbar am Zitat übersehen hast: Die haben Whitespaces drin.
Du nicht. Leerzeichen, \t, \r und \n haben für alle scanf-Varianten mit %s nunmal eine Sonderrolle.
Hab ich aber in einem früheren Post schon erwähnt.

Das du ohne diese Whitespaces mit (s-)scanf nicht beide Stringteile gleichzeitig behandeln kannst, hat einerseits Muepe zumindest gesagt und ich auch schon getestet, um sicher zu gehen.
Und es stimmt ganz einfach. Ohne Leerzeichen dazwischen wird das = und die Zahl vom %s geschluckt.

Bei diesem "Magic 19" im Zitat wird mir übrigens schlecht. Sorry, ist aber so.
Hokuspokus, 20 minus 1 ist 19! Wahahahaha...

Zu meinem Code: Wenn der String von woanders kommt, weise ihn doch einfach option zuerst zu.
strcpy(option,argv[1]);

Und hab ich irgendwann gesagt, mein Code funktionert nur mit Blanks?
Oder schaut der Code danach aus?

Ich denke, einfach reinkopieren und ausprobieren ist nicht zuviel verlangt.

Gruß
 
Zuletzt bearbeitet:
Hi Sheel,

Ich hab es jetzt auf meine Art gelöst, so wie ich es wollte ^^. Es ist leider nicht so, das ich mir alles Zeigen lassen will, wie Muepe32 behauptet. Ich hab es einfach noch nie so gemacht, wie es in mancher Literatur oder Links geschrieben stand und daher hatte ich auch Probleme mit dem umsetzten von sscanf.
Ich hab jetzt eine Mischung aus

sscanf(option,"-w=%d", &zahl); & strtok(option, "="); gemacht

Funktioniert bestens. Ich hätte nur gerne die andere Variante nur auch sehr gerne gescheckt

Gruß
 
Zuletzt bearbeitet:
Ich versteh immer noch nicht, warum man nicht Funktionen verwendet, die extra dafür gemacht wurden, Optionen zu parsen. Die getopt()-API ist genau das, was der richtige Mann von heute ;-) benutzt.
 
wenn du davon ausgehen kannst dass 0 keine gültige eingabe ist für n, könntest du auch einfach atoi() verwenden.

Code:
int x  = atoi("19383");
 
Zurück