scanf

Récupération de données entrées au clavier

3 993 lectures 3.5/5 (4 votes) Sébastien Sougnez

La structure interne ainsi que le design d'AreaProg ont récemment été modifiés.
Suite à cela, le format de certains articles a été perturbé. Le problème est connu et en cours de résolution. Merci de votre compréhension.

Je vous ai dit dans le cours précédent que le printf était extrêmement important dans la programmation en mode console (pas graphique), mais que serait le printf sans le scanf. Effectivement, si le printf sert à afficher des chaines formatées, scanf, lui, sert à récupérer des chaines formatées. La syntaxe de déclaration de cette fonction est :
#include <stdio.h>

int scanf (const char * format, ...);
Vous voyez que la fonction prend un nombre indéfini de paramètres, effectivement, nous pouvons récupérer plusieurs valeurs d'un coup même si généralement, on en récupère qu'une seule mais parfois il peut être interessant d'en récupérer plus qu'une, par exemple dans le cas d'une date. Les valeurs sont récupérées suivant le format qui est aussi le premier argument. Un format sera formé de caractère alphanumérique (rarement), mais il sera surtout accompagné d'opérateur de conversion, permettant de définir le type de données que l'on va accueillir. Pour inclure un caractère quelconque dans une chaine de caractère, il suffit de le taper, mais pour insérer un opérateur de conversion, il faut l'introduire grace au signe %. Comme vous le voyez, la fonction renvoie un entier correspondant au nombre de données récupérées, vous pourrez ainsi voir si la fonction s'est mal passée, mais pour en revenir au format, je vais l'expliquer sous forme d'exemple, mais je dois également vous dire que la valeurs seront récupérées dans des pointeurs. Regardez le programme suivant :
#include <stdio.h>

	int main() {

	int a = 0;

	printf ("Entrez a : ");
	scanf ("%d", &a);

	printf ("a : %d
", a);

	return 0;

}
ImageImageImage
Nous commençons donc par déclarer la variable a qui servira à contenir un nombre entré au clavier, ensuite, nous récupérons ce nombre avec scanf. Pour signaler au scanf que nous voulons récupérer un nombre entier, nous devons mettre %d dans le format, ainsi il va récupérer l'entier tapé au clavier. Comme je vous l'ai dit, il va placer la valeur récupérée dans un pointeur, nous devons donc faire passer l'adresse de la variable dans laquelle sera stockée le nombre, vous utiliserez donc le & pour spécifier qu'on passe l'adresse de la variable en paramètre. Comme je l'ai dit, vous pouvez également introduire des caractères alphanumériques dans votre format, mais on ne le fait pas souvent, voici un exemple où cela est utile :
#include <stdio.h>

int main() {

int jour = 0;
int mois = 0;
int annee = 0;

printf ("Entrez une date : ");
scanf ("%d/%d/%d", &jour, &mois, &annee);

printf ("Date : %d/%d/%d
", jour, mois, annee);

return 0;

}
ImageImageImage
Nous commençons ici par déclarer 3 variables entières : jour, mois et annee, on aimerait que l'utilisateur tape la date avec les "/" mais que ceux-ci soient "passés" par le scanf, nous les mettons donc tels quels dans le format. Nous utilisons donc le format %d/%d/%d, l'utlisateur devra donc absolument entrer les / sans quoi la date sera différente de celle entrée (toutes les variables n'auront pas leur valeurs). Le seul truc à retenir pour les scanf sont les opérateurs de conversion. Ceux-ci sont précédés de % et définissent le type de la variable que nous nous attendons à recevoir, voici une liste des plus utilisés : d : Cet opérateur sert à récupérer des variables de type int. o : Cet opérateur sert à récupérer des variables de type unsigned int (entier non signé) sous forme octale. x : Cet opérateur sert à récupérer des variables de type unsigned int (entier non signé) sous forme hexa-décimale. f, g, a, e ou E: Cet opérateur sert à récupérer des variables de types float. s : Cet opérateur servira à récupérer des chaines de caractères mais la récupération s'arrêtera quand la fonction rencontrera un , un caractère blanc (espace) ou que la longueur maximale de la chaine est atteinte. c : Cet opérateur sert à récupérer un caractère, la variable devra être de type char.<br /><br /> Vous verrez qu'au fur et à mesure que vous programmez et que vous lisez mes cours, vous vous familiariserez avec le printf et le scanf, ne vous inquiétez donc pas s'il vous faut un peu de temps pour comprendre, faites des tests et voyez ce qui se passe, c'est ainsi que vous comprendrez le mieux.

Noter

Veuillez vous identifier ou vous inscrire pour donner une note à cet article.

Commentaires / Questions

Aucun commentaire.

Veuillez vous identifier ou vous inscrire pour réagir à cet article.

Avatar

Sébastien Sougnez

Envoyer un mail Site web Windows live messenger LinkedIn Twitter Facebook MVP Administrateur

25754 points