Programmer en langage C
150
© Éditions Eyrolles
Les fonctions printf et scanf permettent de lire ou d’afficher simultanément plusieurs
informations de type quelconque. En revanche, gets et puts ne traitent qu’une chaîne à la
fois.
De plus, la délimitation de la chaîne lue ne s’effectue pas de la même façon avec scanf et
gets. Plus précisément :
●
avec le code %s de scanf, on utilise les délimiteurs habituels (l’espace ou la fin de ligne).
Cela interdit donc la lecture d’une chaîne contenant des espaces. De plus, le caractère délimiteur n’est pas consommé : il reste disponible pour une prochaine lecture ;
●
avec gets, seule la fin de ligne sert de délimiteur. De plus, contrairement à ce qui se produit
avec scanf, ce caractère est effectivement consommé : il ne risque pas d’être pris en
compte lors d’une nouvelle lecture.
Dans tous les cas, vous remarquerez que la lecture de n caractères implique le stockage en
mémoire de n+1 caractères, car le caractère de fin de chaîne (\0) est généré automatiquement
par toutes les fonctions de lecture (notez toutefois que le caractère séparateur – fin de ligne ou
autre – n’est pas recopié en mémoire).
Ainsi, dans notre précédent programme, il n’est pas possible (du moins pas souhaitable !) que
le nom fourni en donnée contienne plus de 19 caractères.
Dans les appels des fonctions scanf et puts, les identificateurs de tableau comme nom, prenom ou ville n’ont pas besoin d’être précédés de l’opérateur & puisqu’ils représentent déjà
des adresses. La norme prévoit toutefois que si l’on applique l’opérateur & à un nom de
tableau, on obtient l’adresse du tableau. Autrement dit, &nom est équivalent à nom.
La fonction gets fournit en résultat soit un pointeur sur la chaîne lue (c’est donc en fait la valeur
de son argument), soit le pointeur nul en cas d’anomalie.
La fonction puts réalise un changement de ligne à la fin de l’affichage de la chaîne, ce qui n’est
pas le cas de printf avec le code de format %s.
printf ("donnez votre nom et votre prénom : ") ;
scanf ("%s %s", nom, prenom) ;
printf ("bonjour cher %s %s qui habitez à ", prenom, nom) ;
puts (ville) ;
}
quelle est votre ville : Paris
donnez votre nom et votre prénom : Dupont Yves
bonjour cher Yves Dupont qui habitez à Paris
Entrées-sorties classiques de chaînes (suite)
Delannoy Livre.book Page 150 Mercredi, 6. mai 2009 4:26 16
150
© Éditions Eyrolles
Les fonctions printf et scanf permettent de lire ou d’afficher simultanément plusieurs
informations de type quelconque. En revanche, gets et puts ne traitent qu’une chaîne à la
fois.
De plus, la délimitation de la chaîne lue ne s’effectue pas de la même façon avec scanf et
gets. Plus précisément :
●
avec le code %s de scanf, on utilise les délimiteurs habituels (l’espace ou la fin de ligne).
Cela interdit donc la lecture d’une chaîne contenant des espaces. De plus, le caractère délimiteur n’est pas consommé : il reste disponible pour une prochaine lecture ;
●
avec gets, seule la fin de ligne sert de délimiteur. De plus, contrairement à ce qui se produit
avec scanf, ce caractère est effectivement consommé : il ne risque pas d’être pris en
compte lors d’une nouvelle lecture.
Dans tous les cas, vous remarquerez que la lecture de n caractères implique le stockage en
mémoire de n+1 caractères, car le caractère de fin de chaîne (\0) est généré automatiquement
par toutes les fonctions de lecture (notez toutefois que le caractère séparateur – fin de ligne ou
autre – n’est pas recopié en mémoire).
Ainsi, dans notre précédent programme, il n’est pas possible (du moins pas souhaitable !) que
le nom fourni en donnée contienne plus de 19 caractères.
Dans les appels des fonctions scanf et puts, les identificateurs de tableau comme nom, prenom ou ville n’ont pas besoin d’être précédés de l’opérateur & puisqu’ils représentent déjà
des adresses. La norme prévoit toutefois que si l’on applique l’opérateur & à un nom de
tableau, on obtient l’adresse du tableau. Autrement dit, &nom est équivalent à nom.
La fonction gets fournit en résultat soit un pointeur sur la chaîne lue (c’est donc en fait la valeur
de son argument), soit le pointeur nul en cas d’anomalie.
La fonction puts réalise un changement de ligne à la fin de l’affichage de la chaîne, ce qui n’est
pas le cas de printf avec le code de format %s.
printf ("donnez votre nom et votre prénom : ") ;
scanf ("%s %s", nom, prenom) ;
printf ("bonjour cher %s %s qui habitez à ", prenom, nom) ;
puts (ville) ;
}
quelle est votre ville : Paris
donnez votre nom et votre prénom : Dupont Yves
bonjour cher Yves Dupont qui habitez à Paris
Entrées-sorties classiques de chaînes (suite)
Delannoy Livre.book Page 150 Mercredi, 6. mai 2009 4:26 16
