Académique Documents
Professionnel Documents
Culture Documents
Déclaration
chaîne <NomVariable>
Exemples
Espace à réserver
Lors de la déclaration, nous devons indiquer l'espace à réserver en mémoire pour le stockage de
la chaîne.
La représentation interne d'une chaîne de caractères est terminée par le symbole '\0' (NUL).
Ainsi, pour un texte de n caractères, nous devons prévoir n+1 octets.
Page 1 2022-2023
Mémorisation
Le nom d'une chaîne est le représentant de l'adresse du premier caractère de la chaîne. Pour
mémoriser une variable qui doit être capable de contenir un texte de N caractères, nous avons
besoin de N+1 octets en mémoire:
En général, les tableaux sont initialisés par l'indication de la liste des éléments du tableau entre
accolades:
Pour le cas spécial des tableaux de caractères, nous pouvons utiliser une initialisation plus
confortable en indiquant simplement une chaîne de caractère constante:
Lors de l'initialisation par [], l'ordinateur réserve automatiquement le nombre d'octets nécessaires
pour la chaîne, c.-à-d.: le nombre de caractères + 1 (ici: 6 octets). Nous pouvons aussi indiquer
explicitement le nombre d'octets à réserver, si celui-ci est supérieur ou égal à la longueur de la
chaîne d'initialisation.
Page 2 2022-2023
Exemples
L'accès à un élément d'une chaîne de caractères peut se faire de la même façon que l'accès à un
élément d'un tableau. En déclarant une chaîne par:
char A[6];
nous avons défini un tableau A avec six éléments, auxquels on peut accéder par:
Page 3 2022-2023
Exemple
La précédence des caractères dans l'alphabet d'une machine est dépendante du code de caractères
utilisé. Pour le code ASCII, nous pouvons constater l'ordre suivant:
Le code ASCII
Page 4 2022-2023
Relation de précédence
De la précédence alphabétique des caractères, on peut déduire une relation de précédence 'est
inférieur à' sur l'ensemble des caractères. Ainsi, on peut dire que
car dans l'alphabet de la machine, le code du caractère '0' (ASCII: 48) est inférieur au code du
caractère 'Z' (ASCII: 90).
Exemples
(le code ASCII de ' ' est 32, et le code ASCII de 'a' est 97)
Exemple 1 :
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.
Page 5 2022-2023
voici une petite phrase !
! esarhp etitep enu iciov
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
/* Déclarations */
L= strlen(TXT);
cpt=0;
Page 6 2022-2023
if (TXT[I]=='e') cpt++;
putchar(TXT[I]); /* ou printf("%c",TXT[I]); */
putchar('\n'); /* ou printf("\n"); */
AIDE=TXT[I];
TXT[I]=TXT[J];
TXT[J]=AIDE;
puts(TXT); /* ou printf("%s\n",TXT); */
system("pause");}
/*
*/
Page 7 2022-2023
Exemple 2 :
Ecrire un programme qui lit un texte TXT (de moins de 200 caractères) et qui enlève toutes les
apparitions du caractère 'e' en tassant les éléments restants. Les modifications se feront dans la même
variable TXT.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
/* Déclarations */
gets(TXT);
J=0;
TXT[J] = TXT[I];
/* Terminer la chaîne !! */
TXT[J]='\0';
Page 8 2022-2023
/* Edition du résultat */
puts(TXT);
system("pause");}
/*
*/
Page 9 2022-2023
Chapitre 8
Les fichiers de type texte
C'est un document qui se trouve sur un support magnétique (disquette, disque dur, ruban
magnétique, ...).
Chaque fichier dispose d'un nom "physique" :
"employes.dta" : données (dta : data (données)) concernant les employés
Le suffixe dta est l'abrégé du mot "data" (données) qui est souvent utilisé pour désigner un fichier
qui contient des données. Le suffixe "c" désigne un fichier qui contient un programme écrit en
langage C.
Un fichier de type texte est une suite de lignes de texte. Dépendant du type de la variable, le
compilateur lit une suite de caractères et convertit selon le type déclaré.
a) Déclarer
FILE *aLire, *aCreer;
Page 11 2022-2023
aLire et aCreer sont des identificateurs inventés par l'usager pour désigner les noms "logiques"
(noms internes) d'un fichier à lire et d'un fichier à créer. On utilise aussi assez souvent : FILE
*donnees, *resultats;
FILE est un mot anglais pour désigner un fichier.
Page 11 2022-2023
4) Lecture dans un fichier
Notez qu'on lit un fichier texte de haut en bas, de gauche à droite (chacune des lignes lues).
fscanf (aLire, "codes de format", liste des adresses);
On utilise un éditeur de texte pour taper les données, corriger les erreurs de frappe et sauvegarder
le fichier.
Ne pas utiliser un logiciel de traitement de texte (comme Word) pour éditer les données. Dans le
fichier, il y aura des caractères spéciaux qui ne correspondent pas aux vraies données.
Page 12 2022-2023
/* préparer le fichier à créer */
aCreer = fopen("personne.dta", "w");
do{
/* saisie de données */
printf("\n\nEntrez f ou m pour le sexe : ");
fflush(stdin);
sexe = toupper(getchar());
printf("\n\nEntrez le nombre de pieds et de pouces : ");
scanf("%d%d", &nbPieds, &nbPouces);
/* convertir en mètre : */
taille = (nbPieds + nbPouces / 12.0) * FACTEUR;
/* écriture dans le fichier : */
fprintf(aCreer,"%c%5d%3d%7.2f\n", sexe, nbPieds, nbPouces, taille);
printf("\n\nVoulez-vous continuer ? (O/N) >> ");
fflush(stdin);
reponse = toupper(getchar());
} while (reponse == 'O');
/* fermeture du fichier à créer : */
fclose(aCreer);
}
Dans l'industrie informatique, la création de données peut se faire par les opérateurs qui tapent
très vite les données.
Méthode 3 : création d'un fichier à partir d'un fichier existant
Supposons qu'on dispose maintenant du fichier "personne.dta" créé par l'exécution du
programme de la méthode 2.
Écrire un programme permettant de lire le fichier "personne.dta" et de créer un nouveau fichier
qui ne contient que la taille de chacune des femmes. Le nom du nouveau fichier est "taille.fem".
Page 13 2022-2023
#include <stdio.h>
void main()
{
/* déclarer le fichier à lire et le fichier à créer */
FILE *aLire, *aCreer;
char sexe;
int nbPieds, nbPouces;
float taille;
Page 14 2022-2023
Autres exemples
Exemple 1
2. le fichier nommé "divise720.txt" qui contient les diviseurs de 720 avec leurs rangs.
Comment faire pour obtenir et afficher les diviseurs de 6?
- on examine tous les candidats de 1 à 6 (1, 2, 3, 4, 5 et 6)
- si le candidat est un diviseur de 6 (6 % candidat vaut 0) et dans ce cas, on l'écrit dans le fichier
Comment créer un fichier ?
Page 15 2022-2023
3. Très souvent, dans une boucle, au bon endroit, on écrit des informations voulues dans le
fichier :
#include <stdio.h>
void main()
{
FILE *aCreer;
Page 16 2022-2023
if (NOMBRE1 % candidat == 0){
/* candidat est un diviseur de NOMBRE1 */
rang++; /* incrémenter le rang */
/* écrire dans le fichier */
fprintf(aCreer,"%3d) %5d\n", rang, candidat);
}
/* fermer le fichier : obligatoire pour créer un fichier */
fclose(aCreer);
printf("Fin de la creation du fichier %s\n\n", NOMFILE1);
/* créer le fichier contenant les diviseurs de 720 */
/* ouvrir le fichier en mode d'écriture "w" (de "writing": pour écrire) */
aCreer = fopen(NOMFILE2, "w");
/* examiner tous les "candidats" de 1 à 720 : */
rang = 0;
for (candidat = 1; candidat <= NOMBRE2; candidat++)
if (NOMBRE2 % candidat == 0)
/* candidat est un diviseur de NOMBRE2 */
/* écrire dans le fichier */
fprintf(aCreer,"%3d) %5d\n", ++rang, candidat);
/* fermer le fichier : obligatoire pour la création d'un fichier */
fclose(aCreer);
printf("Fin de la creation du fichier %s\n\n", NOMFILE2);
Page 17 2022-2023