Quelle est la différence entre% * c% c et% c en tant que spécificateur de format pour scanf?

J’obtiens généralement un caractère avec %c , mais j’ai vu du code qui utilisait %*c%c . Par exemple:

 char a; scanf("%*c%c", &a); 

Quelle est la différence?

    Dans une chaîne au format scanf , après le % , le caractère * est le caractère de suppression des affectations .

    Dans votre exemple, il mange le premier caractère mais ne le stocke pas.

    Par exemple, avec:

     char a; scanf("%c", &a); 

    Si vous entrez: xyz\n , ( \n est le caractère de la nouvelle ligne), x sera stocké dans l’object a .

    Avec:

     scanf("%*c%c", &a); 

    Si vous entrez: xyz\n , y sera stocké dans l’object a .

    C dit spécifie le * pour scanf cette façon:

    (C99, 7.19.6.2p10) À moins que la suppression d’atsortingbution ne soit indiquée par un *, le résultat de la conversion est placé dans l’object pointé par le premier argument suivant l’argument de format qui n’a pas encore reçu de résultat de conversion.

    Selon Wikipedia :

    Un astérisque facultatif (*) juste après le symbole de pourcentage indique que la donnée lue par ce spécificateur de format ne doit pas être stockée dans une variable. Aucun argument derrière la chaîne de format ne doit être inclus pour cette variable supprimée.

    C’est pour que vous puissiez ignorer le caractère identifié par cet astérisque.