1.3 Lecture au clavier
1.3.1 Lecture d'un entier
Nous allons maintenant voir un cas où l'utilisation d'une variable est indispensable. Il s'agit de demander un entier à l'utilisateur lors de l'exécution du programme, et d'afficher sa valeur et celle de son carré. La requête d'un entier à l'utilisateur se fait avec la commande scanf et son utilisation est assez similaire à celle de printf . Voici un exemple de programme qui lit un entier au clavier puis affiche son carré :
|
|
#include <stdio.h>
int main()
{
int nombre;
printf("Entrez un entier : ");
scanf("%d", &nombre);
printf("Le carré de %d est %dn", nombre, nombre * nombre);
return 0;
}
Pour comprendre ce qui se passe lors de l'exécution du code ci-dessus :
L'instruction scanf("%d", &nombre);
bloque l'exécution du programme jusqu'à ce que l'utilisateur ait tapé un nombre entier et ait appuyé sur la touche entrée du clavier. A ce moment, la valeur de l'entier tapé est stockée dans la variable nombre
.
De la même manière que pour afficher un entier, il fallait utiliser la chaîne "%d" avec printf puis l'entier à afficher, on utilise la chaîne "%d" avec scanf pour lui indiquer qu'on veut lire un entier. Pour indiquer que l'on ne veut pas simplement remplacer l'identifiant nombre
par sa valeur, lors de l'exécution de l'instruction scanf
, mais que l'on fournit la variable pour que sa valeur puisse être modifiée, on place le caractère "&" devant l'identifiant.
Nous verrons plus tard la signification exacte de ce caractère "&" et considérerons pour l'instant qu'il permet simplement d'indiquer à scanf que la valeur lue au clavier peut être stockée dans la variable qui suit ce caractère.
Une fois que l'utilisateur a entré un nombre, puis appuyé sur la touche entrée, l'exécution du reste du code est identique à ce qui se serait produit si l'on avait écrit les instructions suivantes :
nombre = 15;
printf("Le carré de %d est %dn", nombre, nombre * nombre);
Au final à l'écran, il sera affiché :
Entrez un entier : 15
15 a pour carré 225
Faites aussi un test avec un nombre entier négatif, par exemple -8. Vous devriez avoir au final :
Entrez un entier : -8
-8 a pour carré 64
Comme pour l'instruction printf
, on peut placer plusieurs "%d" dans le texte fourni à scanf
, pour lui indiquer que plusieurs entiers doivent être lus. L'instruction scanf("%d%d", &nombre1, &nombre2);
permet ainsi de lire deux nombres au clavier. Pour que les nombres soient pris en compte, l'utilisateur devra séparer les nombres soit par un espace, soit par une tabulation, soit par un retour à la ligne. Il n'est cependant pas nécessaire de mettre d'espace ou de caractère "n" entre, ou après les "%d" dans le scanf
. C'est d'ailleurs tout à fait déconseillé et peut poser des problèmes.
Par exemple, le programme suivant demande deux nombres à l'utilisateur, puis les affiche :
#include <stdio.h>
int main()
{
int nombre1;
int nombre2;
printf("Veuillez entrer deux nombres séparés par un espace : ");
scanf("%d%d", &nombre1, &nombre2);
printf("Les deux nombres que vous avez tapés sont %d et %dn", nombre1, nombre2);
return 0;
}
1.3.2 Exercices
Exercice : écrivez un programme qui affiche le texte "Veuillez entrer un nombre : ", qui attend ensuite que l'utilisateur entre un nombre entier, et qui affiche alors la ligne suivante : "Votre nombre est : ", suivi de la valeur du nombre.
Solution :
#include <stdio.h>
int main()
{
int nombre;
printf("Veuillez entrer un nombre : ");
scanf("%d", &nombre);
printf("Votre nombre est %dn", nombre);
return 0;
}
Exercice : écrivez un programme qui demande à l'utilisateur deux nombres, puis qui en affiche la somme.
Solution :
#include <stdio.h>
int main()
{
int nombre1;
int nombre2;
printf("Veuillez entrer deux nombres : ");
scanf("%d%d", &nombre1, &nombre2);
printf("La somme de ces deux nombres est %dn", nombre1 + nombre2);
return 0;
}
Maintenant que vous avez compris comment fonctionnait l'affichage et l'entrée de texte, pour permettre la vérification automatique de vos programmes par notre système d'évaluation, nous ne vous demanderons plus d'afficher de texte décoratif. Ainsi, on écrira par exemple pour cet exercice :
#include <stdio.h>
int main()
{
int nombre1;
int nombre2;
scanf("%d%d", &nombre1, &nombre2);
printf("%dn", nombre1 + nombre2);
return 0;
}
Remarque : il est aussi possible de calculer le résultat du calcul de la somme avant de l'afficher :
#include <stdio.h>
int main()
{
int nombre1;
int nombre2;
int somme;
scanf("%d%d", &nombre1, &nombre2);
somme = nombre1 + nombre2;
printf("%dn", somme);
return 0;
}