9
votes

% * c dans scanf () - Qu'est-ce que cela signifie?

J'ai essayé d'exécuter ce programme à Turbo C mais n'a pas pu déchiffrer la sortie. Qu'est-ce que ce % * c code> signifie? Toute aide serait appréciée.

Enter day, month and year 23
2
1991
3
5
The date is: 23 1991 5


2 commentaires

Et s'il veut défaire les 3 caractères suivants?


@ Tuğrulbüyükışık: Vous pouvez utiliser % * 3c pour spécifier le nombre de caractères à sauter.


4 Réponses :


11
votes

Le * dans un scanf () Format signifie 'Lire les données mais ne l'attribuez pas à une variable dans la liste des arguments ". Dans le contexte, cela signifie que vous pouvez taper: xxx

et obtenir la journée (18), mois (7) et année (2012) interprété correctement. Les espaces de la chaîne de format sont cruciaux et compliquent des choses. Normalement, % c lit le caractère suivant, même un espace, mais les espaces autour des spécificateurs de conversion % * C traitent de l'espace blanc. Le code a donc besoin d'une non-vide. caractère à consommer.

d'où le comportement observé que lorsque vous avez tapé: xxx

Le 2 (seul) a été consommé par le premier % * c et le 3 (seuls) a été consommé par la seconde.

Ceci est standard C et non une caractéristique particulière de Turbo C (dont la première édition de la question spécifiée, Mais la question a été modifiée pour supprimer la référence à Turbo C puisque j'ai écrit cette réponse).


1 commentaires

Je suppose que je ne le savais pas. Merci de toute façon!



5
votes

le * après % dans une chaîne de format signifie que l'entrée correspondant au format sera ignorée (il n'est donc pas nécessaire de passer dans un pointeur sur une variable pour stocker le valeur correspondante que vous n'allez pas utiliser).


0 commentaires

3
votes

Cela signifie ignorer le caractère suivant tel qu'un espace, / ou un - qui est courant dans les dates écrites.


0 commentaires

1
votes

Utiliser * avec scanaf supprime l'affectation. Le résultat de la conversion qui suit est jeté.


0 commentaires