Annexes

Cette annexe peut vous aider.

A propos de scanf()

Afin de réaliser le programme game_text.c, nous vous recommandons d'utiliser la fonction scanf() pour lire les caractères saisies par un utilisateur au clavier sur l'entrée standard de votre terminal. La fonction scanf() prend en paramètre une chaîne de caractères décrivant le format demandé en entrée, de manière comparable à la fonction printf().

Par exemple :

// lecture d'un entier
int x;
int ret = scanf("%d", &x);

Le point fort de la fonction scanf() et qu'elle permet de vérifier la correspondance des caractères saisies à un format demandé. Par exemple, le format "%d" permet de demander un entier. Si l'utilisateur a bien saisi un entier ici, alors scanf() renvoie ret=1 pour signaler un matching réussi, et les caractères en entrée sont implicitement convertis avant d'être affecté à la variable x (dont l'adresse &x est passé en argument).

Notez également que la fonction scanf() permet d'ignorer les white-spaces (espace, tabulation, retour à la ligne, ...), ce qui rend le code en général plus robuste.

Dans l'exemple suivant, on souhaire lire deux entiers...

// lecture de deux entiers
int x, y;
int ret = scanf("%d %d", &x, &y);

Si l'on saisit "10 20", alors ret=2, ce qui signifie que scanf a réussi deux matching pour x=10 et y=20. Cela marche aussi si l'on sépare les deux entiers par plusieurs espaces ou un retour ligne. En revanche, si lon saisit "10 abc", alors ret=1, x=10 et y n'est pas affecté. Au final, si l'on saisit "abc 10", aucun matching ne s'effectue et ret=0.

Considérons maintenant le cas où l'on souhaite lire un caractère sur l'entrée standard avec "%c". Dans ce cas particulier les white-spaces ne sont pas ignorés. Si on souhaite les ignorer, il faut alors le dire explcitement avec le format " %c".

// lecture d'un caractère (en ignorant les white-spaces)
char c;
int ret = scanf(" %c", &c);

En cas de fermeture de l'entrée standard (en tapant <ctrl+d>), la fonction scanf() revoie la valeur ret=EOF signifiant end of file.

Vous trouverez dans le code demo-scanf.c un exemple un peu plus complet.

demo-scanf

Consultez le manuel de cette fonction pour plus de détails : man scanf .