Je veux numériser des lignes comme J'ai écrit un petit programme pour le tester: p> compiler cela donne p> et la sortie p> si je le change en p> Je n'obtiens pas de plaintes de compilateur mais toujours p> Je sais que le problème est dans le deuxième jeton car p> donne < / p> mais je veux utiliser une condition de terminaison pour le deuxième jeton. Comment puis-je faire ça? P> p>
5 Réponses :
pouvez-vous essayer
-1 ne fonctionnera pas - % s code> correspond à tout jusqu'à la prochaine utilisation de WhitSpace, il absorbera donc le caractère de ponctuation suivant (
, code> ou
] code >) Et le match ultérieur échouera.
Comme d'autres personnes ont mentionné ... Je ne sais pas exactement ce que vous voulez faire ici ...
En supposant que les objets entre les crochets soient toujours des entiers, vous pouvez simplement faire: P>
sscanf(line, "[%[^,], %[^]]] => %d", a1, a2, &i);
Cela me semble un bug de compilateur (ou réellement, de bibliothèque) (bien que vous ayez besoin d'un troisième support droit, pas seulement deux). Selon la norme (C99, § 7.19.6.2): p>
Si le spécificateur de conversion commence par [] ou [^], le caractère de support droit est dans la liste de numérisation et le caractère suivant droit suivant est le support droit correspondant qui met fin à la spécification; p> blockQuote>
Vous voulez
sscanf(line, "[%[^,], %[^]]] => %i", a1, a2, &i);
On dirait que votre question se résume essentiellement à "Comment inclure le caractère Je vois que vous avez presque compris cela, sauf que vous avez oublié le troisième ] code> dans un
scanne code> scanset". C'est possible et vous n'avez pas besoin de vous échapper. Spécifiquement, la spécification linguistique indique que lorsque le caractère
] code> suit immédiatement le caractère d'ouverture
[ de code> ou suit immédiatement l'ouverture
^ code>. Code>] code> est considéré comme une partie de la scanule, pas un support de fermeture. Donc, dans votre cas, le spécificateur de format est censé regarder comme
"[% [^,],% [^]]]] =>% i" code>. Non
\ code> nécessaire. p>
] code> de caractère après le second scanset. P>