2016-04-13 10 views
0

Guten Tag,Eingabe in C, Sonderfall?

ich den folgenden Code haben:

43  while (TRUE) 
44  { 
45   printf("Swipe Card: "); 
46   scanf("%s;%s=%s", id, banner, cp); 
47   printf("%s\n%s\n%s\n", id, banner, cp); 
48   ProcessStudent(banner, file); 
49 
50  } 

ich dynamisch id zugewiesen haben, banner und cp, aber wenn ich versuche, sie zu drucken (die ich zu überprüfen gerade hat zu ihr Inhalt) wird alles nur in 'id' übernommen. Die Zeichenfolge, die ich versuche zu lesen, sieht so aus: %GRE068?;01540594=000331!

+2

';' und '' = keine Leerzeichen sind. – EOF

+0

Wahr, mein Schlechter. Ich habe es repariert. Verwendet 'scanf ("% [^;]% [^ =]% [^ \ n] ", ID, Banner, cp); 'stattdessen. Vielen Dank. – ricknaght

Antwort

3

scanf versucht nicht, eine vollständige Musterübereinstimmung der Formatzeichenfolge zu erstellen. %s Eingabeformat liest einfach alles bis zum nächsten Leerzeichen (oder EOF). Danach sucht es nach einem ;, und da es nicht findet, dass es keine der anderen Eingaben analysiert.

Wenn Sie an einem anderen Charakter zu stoppen, verwenden [^char]

scanf("[^;];%[^=]=%s", id, banner, cp);