< Passer des arguments à un programme | TutoCFrench | Types de données composés et type dérivés >
Notions :
printf()
scanf()
putchar()
getchar()
Le langage C ne possède aucune instruction d'entrée/sortie mais s'appuie sur une bibliothèque de fonctions standard.
getchar()
et putchar()
getchar()
renvoie un int
, ce qui lui permet de renvoyer un caractères, sur 8 bits, en cas de succès ou -1 en cas d'échec.
putchar()
prend en argument un int
.
gets()
, fgets()
et puts()
gets()
est une fonction à proscrire absolument (danger de buffer overflow). Cette fonction lit une ligne de l'entrée standard stdin
et le copie dans le buffer passé en argument jusqu'à ce que \n
ou EOF
soit rencontré.
fgets()
permet de limiter le nombre de caractères à lire et à copier dans le tableau passé en argument.
puts()
écrit la chaîne passée en argument et rajoute \n
à la fin.
printf()
et scanf()
La fonction printf()
accepte les formats suivants :
%s | pour un argument de type chaîne de caractères |
%c | pour un caractère |
%d | pour un entier |
%e | pour un réel flottant, notation scientifique |
%f | pour un réel flottant, notation standard |
%g | pour un réel flottant, notation la mieux adaptée |
%o | pour une conversion en octal |
%p | pour afficher un pointeur |
%x | pour une conversion en hexadécimal |
Il existe des modificateurs de format :
%hd | pour un short int |
%ld | pour un long int |
%lf | pour un double |
%.3f | un flottant avec 3 chiffres après la virgule |
%20s | une chaîne de 20 caractères |
%[^\n]s | une chaîne de caractères avec les espaces |
Il est possible de définir une taille limite des données affichées.
La fonction scanf()
fonctionne comme printf()
mais effectue une lecture sur l'entrée standard. scanf()
prend en argument les adresses des variables à affecter. Elle renvoie le nombre de champs correctement lus.
scanf()
Attention, scanf()
est une fonction qui pose beaucoup de problèmes et qu'il est fortement déconseiller d'utiliser telle quelle ! Parmis ces problèmes, il y a les risques de bouclage infini : quand scanf()
essaye de convertir une chaine vers un nombre et que la conversion échoue, les caractères non numériques sont laissés dans le buffer. Pour fiabiliser la saisie avec scanf()
, voici un modèle universel :
while(1){ fgets(buf,sizemax,stdin); ret = sscanf(buf,"%c",&c); if(ret != 1) /* instructions à exécuter en cas d'erreur */ if((strlen(buf) == sizemax-1) && (buf[sizemax-2] != '\n')) do c=getchar(); while (c!='\n'); }
< Passer des arguments à un programme | TutoCFrench | Types de données composés et type dérivés >