Previous Next Up Index Contents

8.6.1. Les fonctions de <stdio.h>


Comme nous l'avons déjà vu au chapitre 4, la bibliothèque <stdio> nous offre des fonctions qui effectuent l'entrée et la sortie des données. A côté des fonctions printf et scanf que nous connaissons déjà, nous y trouvons les deux fonctions puts et gets, spécialement conçues pour l'écriture et la lecture de chaînes de caractères.

- Affichage de chaînes de caractères

printf avec le spécificateur de format %s permet d'intégrer une chaîne de caractères dans une phrase.

En plus, le spécificateur %s permet l'indication de la largeur minimale du champ d'affichage. Dans ce champ, les données sont justifiées à droite. Si on indique une largeur minimale négative, la chaîne sera justifiée à gauche. Un nombre suivant un point indique la largeur maximale pour l'affichage.

Exemples

char NOM[] = "hello, world";



printf(":%s:", NOM);
->
:hello, world:
printf(":%5s:", NOM);
->
:hello, world:
printf(":%15s:", NOM);
->
: hello, world:
printf(":%-15s:", NOM);
->
:hello, world :
printf(":%.5s:", NOM);
->
:hello:

puts est idéale pour écrire une chaîne constante ou le contenu d'une variable dans une ligne isolée.

Syntaxe:

puts( <Chaîne> )
Effet:
puts écrit la chaîne de caractères désignée par <Chaîne> sur stdout et provoque un retour à la ligne. En pratique,

puts(TXT); est équivalent à printf("%s\n",TXT);

Exemples

char TEXTE[] = "Voici une première ligne.";
puts(TEXTE);
puts("Voici une deuxième ligne.");

- Lecture de chaînes de caractères

scanf avec le spécificateur %s permet de lire un mot isolé à l'intérieur d'une suite de données du même ou d'un autre type.

Effet:

scanf avec le spécificateur %s lit un mot du fichier d'entrée standard stdin et le mémorise à l'adresse qui est associée à %s.

Exemple

char LIEU[25];
int JOUR, MOIS, ANNEE;
printf("Entrez lieu et date de naissance : \n");
scanf("%s %d %d %d", LIEU, &JOUR, &MOIS, &ANNEE);

Remarques importantes

- La fonction scanf a besoin des adresses de ses arguments:

* Les noms des variables numériques (int, char, long, float, ...) doivent être marqués par le symbole '&' (voir chap 4.4.).

* Comme le nom d'une chaîne de caractères est le représentant de l'adresse du premier caractère de la chaîne, il ne doit pas être précédé de l'opérateur adresse '&' !

- La fonction scanf avec plusieurs arguments présuppose que l'utilisateur connaisse exactement le nombre et l'ordre des données à introduire! Ainsi, l'utilisation de scanf pour la lecture de chaînes de caractères est seulement conseillée si on est forcé de lire un nombre fixé de mots en une fois.

gets est idéal pour lire une ou plusieurs lignes de texte (p.ex. des phrases) terminées par un retour à la ligne.

Syntaxe:

gets( <Chaîne> )
Effet:
gets lit une ligne de de caractères de stdin et la copie à l'adresse indiquée par <Chaîne>. Le retour à la ligne final est remplacé par le symbole de fin de chaîne '\0'.

Exemple

int MAXI = 1000;
char LIGNE[MAXI];
gets(LIGNE);


Exercice 8.2

Ecrire un programme qui lit 5 mots, séparés par des espaces et qui les affiche ensuite dans une ligne, mais dans l'ordre inverse. Les mots sont mémorisés dans 5 variables M1, ... ,M5.

Exemple

   voici une petite phrase !
   ! phrase petite une voici


Exercice 8.3

Ecrire un programme qui lit une ligne de texte (ne dépassant pas 200 caractères) la mémorise dans une variable TXT et affiche ensuite:

a) la longueur L de la chaîne.

b) le nombre de 'e' contenus dans le texte.

c) toute la phrase à rebours, sans changer le contenu de la
variable TXT.

d) toute la phrase à rebours, après avoir inversé l'ordre des
caractères dans TXT:

            voici une petite phrase !
            ! esarhp etitep enu iciov


Exercice 8.4

Ecrire un programme qui lit un texte TXT (de moins de 200 caractères) et qui enlève toutes les apparitions du charactère 'e' en tassant les éléments restants. Les modifications se feront dans la même variable TXT.

Exemple:

   Cette ligne contient quelques lettres e.
   Ctt lign contint qulqus lttrs .


Previous Next Up Index Contents


Feedback - Copyright © 1993,1996,1997 F.Faber