whitespace-Zeichen im format-string (scanf)
Betrachten Sie den folgenden code:
#include<stdio.h>
int main() {
int i=3, j=4;
scanf("%d c %d",&i,&j);
printf("%d %d",i,j);
return 0;
}
Funktioniert es wenn ich 2c3
oder 2 c 3
oder 2c 3
als Eingang, wenn ich den Wert der Variablen ändern. Was soll ich tun, wenn ich will, dass die Benutzer zur Eingabe der gleichen Muster, wie ich will, heißt, wenn %dc%d
dann nur 2c3
akzeptabel ist und nicht 2 c 3
und Umgekehrt, wenn es %d c %d
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Leerzeichen in der format-Zeichenfolge mit 0 oder mehr Leerzeichen in der Eingabe.
So
"%d c %d"
erwartet, dass die Reihe, dann jede Menge von whitespace-Zeichen, dann Zeichenc
, dann ist jede Menge von whitespace-Zeichen und eine andere Nummer am Ende."%dc%d"
erwartet-Nummerc
, Anzahl.Beachten Sie auch, dass, wenn Sie
*
im format-string, unterdrückt Zuordnung:%*c
= Lesen 1 Zeichen, aber nicht das zuweisen der VariablenSo können Sie
"%d%*c c%*c %d"
wenn Sie wollen Kraft Eingabe: Zahl, mindestens 1 Zeichen gefolgt von einer beliebigen Menge von whitespace-Zeichen,c
mindestens 1 Zeichen gefolgt von einer beliebigen Menge von whitespace-Zeichen wieder und Zahl."%dc%d"
erwartet jede Menge von whitespace-Zeichen, Nummer,'c'
, jede Menge Leerzeichen, Zahl.`.Ob Sie diese annehmen möchten
1c2
aber nicht1 c 2
verwenden Sie das Muster, ohne den Raum:Ob Sie diese annehmen möchten
1c2
und1 c 2
(und auch1 \t \t c \t 2
usw.), verwenden Sie das Muster mit dem Raum:Ob Sie diese annehmen möchten
1 c 2
aber nicht1c2
fügen Sie eine gefälschte string mit Leerzeichen:Hier die format-string -
%[ \t]
bedeuten würde: "Lesen Sie eine Zeichenfolge, die enthält eine beliebige Anzahl von Leerzeichen und Tabulator-Zeichen"; aber mit dem zusätzlichen*
, es wird "erwarten eine Zeichenfolge, die enthält eine beliebige Anzahl von Leerzeichen und Tabulatoren; dann verwerfen""%d"
im"%d c %d"
ist irrelevant - das gleiche Ergebnis, wie"%d c%d"
. Leerzeichen akzeptabel sein wird, auch ohne das führende Leerzeichen.Ich glaube, ich würde Lesen scanf Ergebnis in verschiedene Variablen (d.h. nicht wieder
i
undj
) als"%d%s%d"
. Dann überprüfen Sie die Zeichenfolge ein, die Sie von der %s und wenn es Ihren Anforderungen entspricht, die Verwendung der anderen Variablen zu überschreiben, i und j ist.Kraft einen string Parsen erste :
Verwenden Sie dann sscanf() zum konvertieren des strings in int.