Programmation C – Rôle des espaces dans scanf ()

J’ai écrit le code suivant:

#include  int main() { int a, b; printf("Enter values of a and b\n"); scanf(" %d%d ", &a, &b); // Note the two spaces before and after %d // ^This^ printf("a = %db = %d\n", a, b); return 0; } 

Le programme exécute quelque chose comme ceci:

 aps120797@XENON-PC:/mnt/d/Codes/LetUsC$ ./a.out Enter values of a and b 1 2 3 a = 1 b = 2 

Ma question est la suivante: pourquoi prend-il trois entrées au lieu de deux (deux% d est dans scanf ()) et même s’il en prend trois, pourquoi saute-t-il la dernière?

L’espace dans une chaîne de format signifie ignorer toute séquence d’espaces (espaces, nouvelles lignes, tabulations) de l’entrée et arrête l’parsing lorsque le premier caractère non blanc ou la fin de l’entrée est atteint. Ce caractère suivant est laissé dans la mémoire tampon d’entrée afin qu’il puisse être lu par l’opérateur de formatage suivant (s’il en existe un) ou par la prochaine opération d’entrée (si vous appelez getc() après votre scanf() , il lirait Caractère '3' .

Lorsque vous insérez un espace à la fin de la chaîne de format, la nouvelle ligne est ignorée après 2 et continue à numériser jusqu’à ce que le prochain caractère non blanc apparaisse. Donc, il faut atteindre le 3 avant de s’arrêter.