Zwei Strings mit sscanf?
-
Hallo,
ich habe folgendes Problem:
Ein Benutzer gibt eine Strasse (+Hausnummer) an, es wird aber nur die Strasse gelesen, da sscanf nur einen string nimmt (Die Strasse) und den anderen nicht benutzt.
printf("Bitte Strasse und Hausnummer eingeben: "); fgets(puffer,80,stdin); sscanf(puffer,"%s",&strasse);
Eigentlich könnte ich das sscanf ja weg lassen, aber die Strasse+Hausnummer soll in eine Textdatei geschrieben werden, und wenn ich ohne sscanf arbeite schreib er das "\0" Zeichen ja auch in die Datei
-
#include <cstdio> int main() { char strasse[80]; printf("Bitte Strasse und Hausnummer eingeben: "); scanf("%[^\n]s", strasse); return 0; }
Aber Achtung
Der width Operator ist nicht ANSI-C Standard, sondern von Microsoft definiertMicrosoft schrieb:
...
To read strings not delimited by space characters, a set of characters in brackets ([ ]) can be substituted for the s (string) type character. The corresponding input field is read up to the first character that does not appear in the bracketed character set. If the first character in the set is a caret (^), the effect is reversed: The input field is read up to the first character that does appear in the rest of the character set.Note that %[a-z] and %[z-a] are interpreted as equivalent to %[abcde...z]. This is a common scanf function extension, but note that the ANSI standard does not require it.
...
-
Hya !
Pred22 schrieb:
...
es wird aber nur die Strasse gelesen, da sscanf nur einen string nimmt (Die Strasse) und den anderen nicht benutzt.
...Du kannst sscanf auch Parameter für Zahlen mitgeben.
Pred22 schrieb:
Eigentlich könnte ich das sscanf ja weg lassen, aber die Strasse+Hausnummer soll in eine Textdatei geschrieben werden, und wenn ich ohne sscanf arbeite schreib er das "\0" Zeichen ja auch in die Datei
Das lässt sich verhindern.
#include <stdio.h> #include <string.h> int main () { char buf[81]=""; char str[81]=""; char abc[81]=""; int nr = -1; printf("Bitte Strasse und Hausnummer eingeben: "); // Waldweg 13A fgets( buf, 80, stdin ); sscanf( buf, "%s %d %s", str, &nr, abc ); printf( "%s %d %s", str, nr, abc ); return 0; }
Gruß, p.
-
@Zeiger: die Formatkennung [ gehört afaik zum offiziellen Umfang von man: scanf(3) - und dahinter brauchst du kein s mehr:
scanf("%[^\n]",strasse);
@pred22: Du hast doch Straße und Hausnummer schon zusammen in buf stehen - warum mußt du die jetzt noch gesondert zerlegen (besonders wenn du sie doch wieder am Stück ausgeben willst)?
-
CStoll schrieb:
@Zeiger: die Formatkennung [ gehört afaik zum offiziellen Umfang von man: scanf(3) - und dahinter brauchst du kein s mehr:
scanf("%[^\n]",strasse);
...
Da schau her, das wusste ich noch nicht... Dann bezieht sich der Satz aus der MSDN
Microsoft schrieb:
Note that %[a-z] and %[z-a] are interpreted as equivalent to %[abcde...z]. This is a common scanf function extension, but note that the ANSI standard does not require it.
wohl nur auf
%[a-z] %[z-a] %[abcde...z]
.
Danke für den Hinweis
Gruß
zeigerzeiger