9
votes

Comportement / valeur de retour SSCANF

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


2 commentaires

sscanf ne saute pas sur le % d pour manger le % c . 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!


3 Réponses :


8
votes

Dans la case SSCANF ait lu avec succès % d et rien d'autre, il retournerait 1 (un paramètre a été attribué). S'il y avait des caractères avant un numéro, il retournerait 0 (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 car il a été capable d'affecter les deux paramètres.


1 commentaires

Merci. Je pensais que le comportement était juste de stocker indépendamment de l'ordre, d'où la confusion.



2
votes

Vous pouvez toujours vérifier quelle fonction renvoie en le mettant dans une instruction printf comme ci-dessous: xxx

Cela effacera probablement votre doute en imprimant le retour Valeur de SSCANF sur votre terminal.

Vous pouvez également vérifier cela: CplusPlus: SSCANF

espère que cela a aidé :)


2 commentaires

Avez-vous voulu dire printf ("% d \ n", sscanf (chaîne, "% d% c", & n, & c)); ?


Ouais, merci d'avoir mentionné :)



4
votes

Votre sscanf (chaîne, "% d% c") retournera EOF , 0 , 1 ou 2 :

2 : si votre entrée correspond à ce qui suit
[Espaces facultatifs] [chiffres décimaux *] [espaces en option] [n'importe quel caractère] [extra ignoré]

1 : Si votre entrée a échoué ci-dessus mais correspondait aux
[Espaces facultatifs] [chiffres décimaux *] [espaces en option] [pas plus de données]

[correction]
0 : Si votre entrée, après l'espace blanc et un panneau facultatif, vous n'avez pas trouvé de chiffre: Exemples: "z" ou "-" >.

EOF : Si l'entrée était vide "" ou unique espace blanc.

  • Les chiffres décimaux peuvent être précédés d'un caractère de signe + ou - .

0 commentaires