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.
Consultez le manuel de cette fonction pour plus de détails : man scanf
.