Je suis un apprentissage novice C et j'essaie de comprendre le code suivant d'une conférence en ligne. Il scanne une chaîne pour un entier; Si les caractères sont rencontrés, le SSCANF échoue.
int n; char c; if (sscanf(string, " %d %c", &n, &c) == 1) //return the integer else // fail
3 Réponses :
Dans la case SSCANF ait lu avec succès % d code> et rien d'autre, il retournerait
1 code> (un paramètre a été attribué). S'il y avait des caractères avant un numéro, il retournerait
0 code> (aucun paramètre n'a été attribué car il était nécessaire de trouver un entier d'abord qui n'était pas présent). S'il y avait un entier avec des caractères supplémentaires, il retournerait
2 code> car il a été capable d'affecter les deux paramètres. P>
Merci. Je pensais que le comportement était juste de stocker indépendamment de l'ordre, d'où la confusion.
Vous pouvez toujours vérifier quelle fonction renvoie en le mettant dans une instruction code> printf code> comme ci-dessous: Cela effacera probablement votre doute en imprimant le retour Valeur de Vous pouvez également vérifier cela: CplusPlus: SSCANF P> espère que cela a aidé :) p> p> SSCANF code> sur votre terminal. p>
Avez-vous voulu dire printf ("% d \ n", sscanf (chaîne, "% d% c", & n, & c)); code>?
Ouais, merci d'avoir mentionné :)
Votre [correction] sscanf (chaîne, "% d% c") code> retournera
EOF code>,
0 code>,
1 code> ou
2 code>: p>
2 code>: si votre entrée correspond à ce qui suit
[Espaces facultatifs] [chiffres décimaux *] [espaces en option] [n'importe quel caractère] [extra ignoré] p>
1 code>: Si votre entrée a échoué ci-dessus mais correspondait aux
[Espaces facultatifs] [chiffres décimaux *] [espaces en option] [pas plus de données] p>
0 code>: Si votre entrée, après l'espace blanc et un panneau facultatif, vous n'avez pas trouvé de chiffre: Exemples:
"z" code> ou
"-" >. p>
EOF code>: Si l'entrée était vide
"" code> ou unique espace blanc. P>
+ code> ou
- code>. li>
ul>
sscanf code> ne saute pas sur le
% d code> pour manger le
% c code>. Si cela ne rencontre pas un numéro en premier, il retournera 0.
Pour une raison quelconque, le fait que SSCANF ait fait si strictement dans la séquence (par la chaîne de format) m'a complètement échappé. Merci!