Programmation en C :

5. Entrées et sorties

codecommentaire
/* prog5a.c */
#include <stdio.h>
int n;
float x;
char s[11]={0};
 
main() {
  printf("un entier? ");
  scanf("%d",&n);
  printf("un reel? ");
  scanf("%f",&x);
  printf("une chaine? ");
  scanf("%s",s);
  printf("\nvaleurs saisies :\n");
  printf(" entier n=%d\n",n);
  printf(" reel s=%f\n",x);
  printf(" chaine s=\"%s\"\n",s);
}
La fonction de saisie au clavier scanf utilise le même codage de format de données que la fonction d'affichage printf.
scanf a besoin de l'adresse de la variable pour y placer la valeur saisie, aussi la variable passée en paramètre est préfixée d'un &, sauf pour les chaines (qui sont déjà des adresses).
N.B. On remarquera que la chaine de caractère s a été définie comme un tableau de onze caractères dont toutes les cases sont initialisées à 0 (càd '\0'). Remarque. '\"' est le codage du caractère guillemet en C.
exécution commentaire
1e exécution :
→ ./executable5a
un entier? -99
un reel? 12.3
une chaine? bonjour
 
valeurs saisies :
 entier n=-99
 reel x=12.300000
 chaine s="bonjour"
 

2e exécution :
→ ./executable5a
un entier? -99.326BonjourChezVous un réel? une chaine?
valeurs saisies :
 entier n=-99
 reel x=0.326000
 chaine s="BonjourChezVous"
 
Dans la 1e exécution, on saisit successivement un entier, un réel, puis une chaine de caractères, chacun suivi d'un retour à la ligne.

Dans la 2e exécution, on saisit -99.326BonjourChezVous et la fonction scanf effectue une reconnaissance de motif qui valide la saisie d'un entier dès qu'elle rencontre un caractère ne pouvant continuer l'entier (ici '.'), et la saisie d'un réel de la même manière (ici 'B').
N.B. La chaine s a une taille prédéfinie de onze caractère mais scanf lui a octroyé le maximum de caractères possible (ici jusque avant '\n').
codecommentaire
/* prog5b.c */
#include <stdio.h>
int n;
float x;
char s[11]={0};
 
main() {
  printf("entier réel chaine? ");
  scanf("%d%f%s",&n, &x, s);
  printf("\nvaleurs saisies :\n");
  printf(" entier n=%d\n",n);
  printf(" reel s=%f\n",x);
  printf(" chaine s=\"%s\"\n",s);
}
Comme printf, scanf peut prendre plusieurs variables en paramètres.
exécution commentaire
1e exécution
→ ./executable5b
entier réel chaine? -99 12.3 bonjour
 
valeurs saisies :
 entier n=-99
 reel x=12.300000
 chaine s="bonjour"
 

2e exécution
→ ./executable5b
entier réel chaine? 99-12.3Bonjour Chez Vous Autres
  valeurs saisies :
 entier n=99
 reel x=-12.300000
 chaine s="Bonjour"
 
Le caractère espace sert de séparateur de saisie au même titre que le retour à la ligne, y compris pour les chaines de caractères.

N.B. une partie du texte saisi dans la 2e exécution (Chez Vous), n'est pas utilisé par le programme. Qu'est-il devenu ?...
Voir annexe : Les entrées/sorties du langage C.