Document Details

HotMoldavite6237

Uploaded by HotMoldavite6237

Université Sultan Moulay Slimane Faculté Polydisciplinaire Beni Mellal

Pr. A. Farchane

Tags

programmation C langage C programmation informatique

Summary

Ce document est un ensemble de notes sur la programmation en C, covering la compilation , les types de base, les opérateurs, les instructions de contrôle, les tableaux, les pointeurs, les chaines de caractères , les structures, et les fichiers.

Full Transcript

Programmation en langage C MIP S3 ______________________ Pr. A. Farchane 22:38 Programmation en C 1 Plan du cours o Introduction o Types de base, variables, constantes o Opérateurs et expressions o Les entrées sorti...

Programmation en langage C MIP S3 ______________________ Pr. A. Farchane 22:38 Programmation en C 1 Plan du cours o Introduction o Types de base, variables, constantes o Opérateurs et expressions o Les entrées sorties en C o Les structures de contrôle o Les tableaux o Les pointeurs o Les chaînes de caractères o Les fonctions et les procédures o Les structures o Les fichiers. 22:38 Programmation C 2 Historique Le C a été conçu en 1972 par Dennis Richie et Ken Thompson; En 1978, Brian Kernighan et Dennis Richie publient la définition classique du C dans le livre The C Programming language; Le C devenant de plus en plus populaire dans les années 80; En 1983, l’ANSI (American National Standards Institute) décida de normaliser le langage ; Ce travail s’acheva en 1989 par la définition de la norme ANSI C; C’est ce standard, ANSI C, qui est décrit dans ce cours. 22:38 Programmation C 3 La compilation Le C est un langage compilé: – Un programme C est décrit par un fichier texte, appelé fichier source. – Ce fichier est traduit en langage machine. – Cette opération est effectuée par un programme appelé compilateur. La compilation se décompose en 4 phases : 1. Le traitement par le préprocesseur; 2. La compilation ; 3. L’assemblage ; 4. L’édition de liens. 22:38 Programmation C 4 La compilation 1. Le traitement par le préprocesseur; Le préprocesseur effectue des transformations purement textuelles ( inclusion d’autres fichiers source... ). 2. La compilation ; Elle traduit le fichier généré par le préprocesseur en assembleur. 3. L’assemblage ; Il transforme le code assembleur en un fichier binaire compréhensibles par le processeur. Le fichier produit par l’assemblage est appelé fichier objet. 4. L’édition de liens. Elle consiste à rassembler dans un seul fichier binaire tout le code binaire nécessaire à l’exécution du programme. Cette opération produit alors un fichier dit exécutable. 22:38 Programmation C 5 La compilation 22:38 Programmation C 6 Les composants élémentaires du C Un programme en langage C est constitué de six groupes de composants élémentaires suivants : – les identificateurs, – les mots-clefs, – les constantes, – les chaînes de caractères, – les opérateurs, – les signes de ponctuation. 22:38 Programmation C 7 Les composants élémentaires du C Les identificateurs : Le rôle d'un identificateur est de donner un nom à une entité du programme, un identificateur peut désigner : – un nom de variable ou de fonction, – un type défini par typedef, struct, union ou enum, – une étiquette. 22:38 Programmation C 8 Les composants élémentaires du C Les mots-clefs: Les mots-clefs sont des mots réservés pour le langage et ne peuvent pas être utilisés comme identificateurs. L'ANSI C compte 32 mots clefs que l'on peut ranger en catégories : – les spécificateurs de stockage : auto register static extern typedef – les spécificateurs de type : char double enum float int long short signed struct union unsigned void – les qualificateurs de type : const volatile – les instructions de contrôle : break case continue default do else for goto if switch while – divers : return sizeof 22:38 Programmation C 9 Les composants élémentaires du C Les commentaires Un commentaire débute par. Par exemple, On ne peut pas imbriquer des commentaires. Quand on met en commentaire un morceau de programme, il faut donc veiller à ce que celui-ci ne contienne pas de commentaire. 22:38 Programmation C 10 Structure d’un programme C Une expression est une suite de composants élémentaires syntaxiquement correcte, par exemple x=0 Une instruction est une expression suivie d’un point-virgule. Le point-virgule signifie en quelque sorte “évaluer cette expression”. Plusieurs instructions peuvent être rassemblées par des accolades { et } pour former une instruction composée. Par exemple, if (x != 0) { z = y / x; t = y % x; } 22:38 Programmation C 11 Structure d’un programme C Déclaration Une instruction composée d’un spécificateur de type et d’une liste d’identificateurs séparés par une virgule est une déclaration. Par exemple, int a; int b = 1, c; double x = 2.38e4; En C, toute variable doit faire l’objet d’une déclaration avant d’être utilisée. 22:38 Programmation C 12 Structure d’un programme C Un programme C se présente de la façon suivante : [ directives préprocesseur] [ déclarations de variables globales] [ fonctions secondaires] main() { déclarations de variables locales, instructions } 22:38 Programmation C 13 Structure d’un programme C Exemple: #include main() { Printf(" Bonjour tout le monde"); } 22:38 Programmation C 14 Structure d’un programme C Les fonctions secondaires peuvent être placées indifféremment avant ou après la fonction principale(main). Une fonction secondaire peut se décrire de la manière suivante : type ma_fonction ( arguments ) { déclarations de variables locales instructions } 22:38 Programmation C 15 Les types de base Les variables servent à stocker les valeurs des données utilisées pendant l’exécution d’un programme. Le C est un langage typé. Cela signifie en particulier que toute variable, constante est d'un type précis. Le type d'un objet définit la façon dont il est représenté en mémoire. 22:38 Programmation C 16 Les types de base Les types de base en C sont: – les caractères, – les entiers, – les flottants (nombres réels), – le booléen(vrai / faux), Ils sont désignés par les mots-clefs suivants : char int float double short unsigned long bool 22:38 Programmation C 17 Les types de base Le type caractère: Le mot-clé désignant les caractères est char. Une variable de type char doit pouvoir contenir le code de n’importe quel caractère de l’ensemble des caractères utilisés par la machine. type identificateur Exemple: char var1 = ‘a’; valeur 22:38 Programmation C 18 Les types de base Le jeu de caractères utilisé correspond généralement au codage ASCII. 22:38 Programmation C 19 Les types de base Le type entier: le mot-clé désignant les entiers est int. Les entiers peuvent être affectés de deux types d’attributs: (précision et représentation). – Les attributs de précision sont short et long. On peut avoir donc trois entiers: – Short int, int et long int – L’attribut de représentation est unsigned. On peut avoir donc trois entiers: – Unsigned short int, unsigned int et unsigned long int 22:38 Programmation C 20 Les types entiers 22:38 Programmation C 21 Les types flottants Les types float, double et long double servent à représenter des nombres en virgule flottante. Ils correspondent aux différentes précisions possibles. 22:38 Programmation C 22 Les constantes Une constante conserve sa valeur pendant toute l’exécution d’un programme. Les constantes peuvent être de types : – entier, – flottant (nombre réel), – caractère. 22:38 Programmation C 23 Les constantes entières Une constante entière peut être représentée de 3 manières différentes suivant la base dans laquelle elle est écrite : – décimale : par exemple, 0 et 12 sont des constantes entières décimales. – octale : Les constantes octales doivent commencer par un zéro. Par exemple, 00 et 03. – hexadécimale : Les constantes hexadécimales doivent commencer par 0x. Par exemple, les représentations hexadécimales de 4 et 15 sont respectivement 0x4 et 0xf. 22:38 Programmation C 24 Les constantes réelles Les constantes réelles sont représentées par la notation classique par mantisse et exposant. L'exposant est introduit par la lettre e ; Par défaut, une constante réelle est représentée avec le format du type double. mais, on peut forcer le type en utilisant F ou L, par exemple: 22:38 Programmation C 25 Les constantes caractères Pour désigner un caractère imprimable, il suffit de: – mettre le caractère entre apostrophes (par ex. 'A') – Ou la précéder par antislash pour les caractères: l'antislash \\, l'apostrophe \’, Le point d'interrogation \? les guillemets \" Pour désigner un caractère non-imprimable, on utilise son code en hexadécimal. les caractères non-imprimables les plus fréquents disposent aussi d'une notation plus simple : 22:38 Programmation C 26 Les opérateurs Les opérateurs: 1. L'affectation; 2. Les opérateurs arithmétiques; 3. Les opérateurs relationnels; 4. Les opérateurs logiques booléens; 5. Les opérateurs logiques bit à bit; 6. Les opérateurs d'affectation composée; 7. Les opérateurs d'incrémentation / décrémentation ; 8. L'opérateur virgule; 9. L'opérateur conditionnel ternaire ; 10. L'opérateur de conversion de type ; 11. L'opérateur adresse, 22:38 Programmation C 27 Les opérateurs L'affectation – L'affectation est symbolisée par le signe =, sa syntaxe est la suivante : variable = expression – L'affectation effectue une conversion de type implicite : la valeur de l'expression est convertie dans le type du terme de gauche. – Par exemple: int x, y = 1; float z= 1.5; x = y+ z; z= z + x; printf("\n %f \n", z); La fonction printf affiche pour z la valeur 3,5 (et non 4), car dans l’instruction x= y+ z; , l’expression y+z a été convertie en entier, 22:38 Programmation C 28 Les opérateurs Les opérateurs arithmétiques + addition - soustraction - changement de signe * multiplication / division % reste de la division (modulo) – L'opérateur % ne s'applique qu'à des opérandes de type entier. – la notation / désigne à la fois la division entière et la division entre flottants: Si les deux opérandes sont de type entier, l'opérateur / produira une division entière , Si l'un des opérandes est un flottant, l'opérateur / délivrera une valeur flottante. 22:38 Programmation C 29 Les opérateurs Les opérateurs arithmétiques – exemple, float x; x = 3 / 2; affecte à x la valeur 1. Par contre x = 3 / 2.0; affecte à x la valeur 1.5. 22:38 Programmation C 30 Les opérateurs Les opérateurs relationnels: > supérieur >= supérieur ou égal < strictement inférieur 1 (en binaire : 0101 devient 0010, soit 2) 22:38 Programmation C 34 Les opérateurs Les opérateurs d'affectation composée – Les opérateurs d'affectation composée sont : += -= *= /= %= &= ^= |= = - Syntaxe expression1 o p = expression2 est équivalente à expression1 = expression1 op expression2 Toutefois, avec l'affection composée, expression1 n'est évaluée qu'une seule fois. 22:38 Programmation C 35 Les opérateurs Les opérateurs ++ -- : – Les opérateurs d'incrémentation ++ et de décrémentation -- s'utilisent aussi bien en suffixe (i++) qu'en préfixe (++i). – Exemple : int a = 3, b, c; b = ++a; c = b++; 22:38 Programmation C 36 Les opérateurs L'opérateur virgule Une expression peut être constituée d'une suite d'expressions séparées par des virgules : expression1, expression2,... , expressionN Cette expression est évaluée de gauche à droite. Sa valeur sera la valeur de l'expression de droite. Exemple int a, b; b = ((a = 3), (a + 2)); L’instruction printf("\n b = %d \n",b); //affichera b=5, 22:38 Programmation C 37 Les opérateurs L'opérateur conditionnel ternaire – syntaxe : condition ? expression1 : expression2 cette expression est égale à expression1 si condition est satisfaite, et à expression2 sinon. – Exemples: l'expression x >= 0 ? x : -x correspond à la valeur absolue d'un nombre. l'instruction max = ((a > b) ? a : b); affecte à max le maximum de a et de b. 22:38 Programmation C 38 Les opérateurs L'opérateur adresse L'opérateur d'adresse & appliqué à une variable retourne l'adresse mémoire de cette variable. La syntaxe est &objet L'opérateur de conversion de type (opérateur de cast) L'opérateur de conversion de type permet de modifier explicitement le type d'un objet. syntaxe : (type) objet – exemple: int i = 3, j = 2 ; float k=(float)i/j ; l’instruction printf("%f \n", k); affichera la valeur 1.5. 22:38 Programmation C 39 Règles de conversion automatique Conversions automatiques lors d'une opération avec, (1) deux entiers : D'abord, les types char et short sont convertis en int. Ensuite, l'ordinateur choisit le plus large des deux types dans l'échelle suivante : int, unsigned int, long, unsigned long (2) un entier et un rationnel : Le type entier est converti dans le type du rationnel. (3) deux rationnels : L'ordinateur choisit le plus large des deux types selon l'échelle suivante : float, double, long double (4) affectations et opérateurs d'affectation : Lors d'une affectation, le résultat est toujours converti dans le type de la destination. Si ce type est plus faible, il peut y avoir une perte de précision. 22:38 Programmation C 40 Les opérateurs Opérateurs de manipulation des pointeurs Lors du travail avec des pointeurs, nous utilisons : – un opérateur 'adresse de': & pour obtenir l'adresse d'une variable – un opérateur 'contenu de': * pour accéder au contenu d'une adresse 22:38 Programmation C 41 Les opérateurs Règles de priorité des opérateurs Ordre Opérateurs 1 () [] ->. → 2 ! ~ ++ -- -(unaire) (type) *(indirection) &(adresse) sizeof  3 * / % → 4 + -(binaire) → 5 > → 6 < >= → 7 == != → 8 &( et bit-à-bit ) → 9 ^ → 10 | → 11 && → 12 || → 13 ?:  14 = += -= *= /= %= &= ^= != =  15 , → 22:38 Programmation C 42 Les entrées sorties Il s'agit des fonctions de la librairie standard stdio.h utilisées avec le clavier et l'écran. Sur certains compilateurs, l'appel à la librairie stdio.h n'est pas nécessaire pour utiliser printf et scanf. La fonction d'écriture « printf » La fonction printf est une fonction d'impression formatée, ce qui signifie que les données sont converties selon le format particulier choisi. – syntaxe: printf("chaîne de contrôle ", expression1,..., expressionN); 22:38 Programmation C 43 Les entrées sorties La fonction d'écriture « printf » – La chaîne de contrôle contient le texte à afficher et les spécifications de format correspondant à chaque expression de la liste. – Les formats sont introduites par le caractère %, suivi d'un caractère désignant le format d'impression. – Les formats d'impression en C sont donnés dans la table suivante. 22:38 Programmation C 44 Les entrées sorties Les formats d'impression en C Format Conversion en Écriture %d Int décimale signée %ld long int décimale signée %u unsigned int décimale non signée %lu unsigned long int décimale non signée %o unsigned int octale non signée %lo unsigned long int octale non signée %x unsigned int hexadécimale non signée %lx unsigned long int hexadécimale non signée %f double décimale virgule fixe %lf long double décimale virgule fixe %e double décimale notation exponentielle %le long double décimale notation exponentielle %g double décimale, représentation la plus courte parmi %f et %e %lg long double décimale, représentation la plus courte parmi %lf et %le %c unsigned char caractère %s char* chaîne de caractères 22:38 Programmation C 45 Les entrées sorties La fonction de saisie « scanf » La fonction scanf permet de saisir des données au clavier et de les stocker aux adresses spécifiées par les arguments de la fonctions. scanf("chaîne de contrôle", argument1,...,argumentN) 22:38 Programmation C 46 Les entrées sorties Formats de saisie pour la fonction scanf 22:38 Programmation C 47 Les entrées sorties Impression et lecture de caractères – Les fonctions getchar et putchar permettent respectivement de lire et d'imprimer des caractères. – La fonction getchar retourne un int correspondant au caractère lu. Pour mettre le caractère lu dans une variable caractere, on écrit caractere = getchar(); – La fonction putchar écrit caractere sur la sortie standard: putchar(caractere); 22:38 Programmation C 48 QCM : Opérateurs Question 1 : Que fait l'opérateur % en C ? A) Il effectue la division entière. B) Il retourne le reste de la division entière. C) Il retourne le quotient de la division entière. D) Il effectue une multiplication. Question 2 : Quelle est la sortie du code suivant ? int a = 5, b = 2; printf("%d", a / b); A) 2.5 B) 2 C) 3 D) Erreur de compilation 22:38 Programmation C 49 Question 3 : Quel opérateur permet d'incrémenter la valeur d'une variable de 1 ? A) + B) += C) ++ D) – Question 4 : Que renvoie l'expression (a > b) ? a : b ? A) a si a est supérieur à b, sinon b B) b si a est supérieur à b, sinon a C) Toujours a D) Toujours b 22:38 Programmation C 50 Question 5 : Quelle est la sortie du code suivant ? int a = 4, b = 5; printf("%d", a & b); A) 1 B) 4 C) 5 D) 0 Question 6 : Quel est l'effet de l'opérateur 3) 0 goto fin; 1 2 else 3 goto debit; fin fin: 22:38 printf("\n fin \n"); Programmation C 69 Les Lestableaux tableaux Un tableau est une variable structurée composée d’un nombre de variables simples de même type désignées par un seul identificateur Ces variables simples sont appelées éléments ou composantes du tableau, elles sont stockées en mémoire à des emplacements contigus (l’un après l’autre) Le type des éléments du tableau peut être : – char, int, float, double, … On peut définir des tableaux : – à une dimension (tableau unidimensionnel ou vecteur) – à plusieurs dimensions (tableau multidimensionnel ) 22:38 70 Lestableaux Les tableaux Déclaration des tableaux La déclaration d'un tableau à une dimension s'effectue en précisant le type de ses éléments et sa dimension : – Syntaxe : Type identificateur[dimension]; – Exemple : float notes; La déclaration d’un tableau permet de lui réserver un espace mémoire dont la taille (en octets) est égal à : dimension * sizeof( type ) – Exemple : short A; // on réserve 200 octets (100* 2 octets) char mot; // on réserve 10 octets (10* 1 octet) 22:38 71 Lestableaux Les tableaux Le nom d'un tableau est le représentant de l'adresse du premier élément du tableau. Les adresses des autres composantes sont calculées (automatiquement) relativement à cette adresse. Exemple: – short A = {1200, 2300, 3400, 4500, 5600}; 22:38 72 Lestableaux Les tableaux Initialisation à la déclaration: On peut initialiser les éléments d’un tableau lors de la déclaration, en indiquant la liste des valeurs respectives entre accolades. – Ex: int A = {1, 2, 3, 4, 5}; Si la liste ne contient pas assez de valeurs pour toutes les composantes, les composantes restantes sont initialisées par zéro. – Ex: short T = {1, 2, 3, 4, 5}; La liste ne doit pas contenir plus de valeurs que la dimension du tableau. – Ex: int C = {1, 2, 3, 4, 5}; → Erreur Il est possible de ne pas indiquer la dimension explicitement lors de l'initialisation. Dans ce cas elle est égale au nombre de valeurs de la liste. – Ex: short T[ ] = {1, 2, 3, 4, 5}; → tableau de 5 éléments 22:38 73 Lestableaux Les tableaux Accès aux composantes d’un tableau L'accès à un élément du tableau se fait au moyen de son indice. – Par exemple, T[i] donne la valeur de l'élément i du tableau T. L’indice du premier élément du tableau est 0. L’indice du dernier élément est égal à la dimension-1 – Ex: int T[ 5] = {9, 8, 7, 6, 5}; → T=9, T=8, T=7, T=6, T=5 On traite les tableaux élément par élément de façon répétitive en utilisant des boucles. 22:38 74 Les Lestableaux tableaux Saisie et affichage d’un tableau Saisie des éléments d’un tableau T d’entiers de taille n : for(i=0; ix += dx; p->y += dy; } int main() { Point p = {2, 3}; printf("Avant déplacement : x = %d, y = %d\n", p.x, p.y); deplacer(&p, 5, 7); // Passe l'adresse de la structure printf("Après déplacement : x = %d, y = %d\n", p.x, p.y); return 0;} 22:38 142 Les tableaux Les structures Qu’est-ce qu’une structure ? Une structure est un type de données défini par l’utilisateur qui regroupe plusieurs variables (membres) de types différents ou identiques sous un seul nom. Elle est utile pour représenter des objets du monde réel ayant plusieurs attributs. Les structures améliorent la lisibilité, la modularité et l’organisation du code. 22:38 143 Les tableaux Les structures Déclaration d'une structure – Syntaxe : struct NomStructure { type1 membre1; type2 membre2;...}; – NomStructure : Nom de la structure. – type1, type2,... : Types des membres de la structure. – membre1, membre2,... : Noms des membres. – Exemple: struct Personne { char nom; int age; 22:38 float taille; }; 144 Les tableaux Les structures Création et utilisation d'une structure Pour utiliser une structure, vous devez déclarer une variable de ce type. int main() { – Exemple: // Déclaration d'une variable de type struct Personne struct Personne p1; #include // Assignation des valeurs struct Personne { printf("Entrez le nom : "); char nom; scanf("%s", p1.nom); int age; printf("Entrez l'âge : "); float taille; scanf("%d", &p1.age); printf("Entrez la taille (en mètres) : "); }; scanf("%f", &p1.taille); // Affichage des valeurs printf("\nDétails de la personne :\n"); printf("Nom : %s\n", p1.nom); printf("Âge : %d ans\n", p1.age); printf("Taille : %.2f m\n", p1.taille); return 0; 22:38 } 145 Les tableaux Les structures Accès aux membres – Pour accéder aux membres d'une structure : On utilise l'opérateur. (point) si on manipule une variable de structure. Avec un pointeur sur une structure, on utilise l'opérateur -> (flèche). – Exemple: //Accès direct: struct Personne p; p.age = 25; //Acces avec pointeur struct Personne *ptr = &p; 22:38 ptr->age = 25; 146 Les tableaux Les structures Initialisation d'une structure Les structures peuvent être initialisées de différentes manières : – Initialisation directe : struct Personne p1 = {"Alice", 30, 1.75}; – Affectation après déclaration : struct Personne p1; p1.age = 25; p1.taille = 1.80; 22:38 147 Les tableaux Les structures Structures imbriquées Les structures peuvent contenir d'autres structures comme membres. – Exemple : struct Adresse { char ville; int codePostal; }; struct Personne { char nom; int age; struct Adresse adresse; // Structure imbriquée }; 22:38 148 Les tableaux Les structures Utilisation avec tableaux On peut créer un tableau de structures pour manipuler un ensemble d'éléments similaires. – Exemple: struct Personne personnes; for (int i = 0; i < 3; i++) { printf("Entrez le nom de la personne %d : ", i+1); scanf("%s", personnes[i].nom); } 22:38 149 Les tableaux Les structures Structures avec pointeurs Les structures peuvent contenir des pointeurs pour gérer des données dynamiques. – Exemple: struct Etudiant { char *nom; int *notes; }; 22:38 150 Les tableaux Les structures Passage d'une structure à une fonction – Les structures peuvent être passées : Par valeur (une copie est transmise). Par adresse (un pointeur est transmis). – Exemple par valeur: void afficherPersonne(struct Personne p) {printf("Nom : %s, Âge : %d, Taille : %.2f\n", p.nom, p.age, p.taille); } – Exemple par valeur: void afficherPersonne(const struct Personne *p) {printf("Nom : %s, Âge : %d, Taille : %.2f\n", p->nom, p->age, p->taille);} 22:38 151 Les tableaux Les structures Typedef avec structures Le mot-clé typedef permet de simplifier l'utilisation des structures en définissant un alias. – Exemple : typedef struct { char nom; int age; float taille; } Personne; Personne p1; // Pas besoin de spécifier "struct" 22:38 152 Les tableaux Les fichiers Définition Un fichier est une séquence de données stockées sur un support externe (comme un disque dur). En langage C, la manipulation des fichiers se fait via des fonctions fournies par la bibliothèque standard stdio.h Types de fichiers En C, il existe deux types principaux de fichiers : 1. Fichiers texte : Contiennent des données lisibles par l’homme (ASCII ou Unicode). Exemple : fichiers.txt,.csv. 2. Fichiers binaires : Contiennent des données sous forme binaire, non lisibles directement. 22:38 Exemple : fichiers d'images, vidéos, bases de données. 153 Les tableaux Les fichiers Opérations de base sur les fichiers Pour manipuler des fichiers en C, on suit les étapes suivantes : 1. Ouvrir un fichier. 2. Lire ou écrire des données dans le fichier. 3. Fermer le fichier. – Ouverture d'un fichier Pour ouvrir un fichier, on utilise la fonction fopen : – Syntaxe : FILE *fopen(const char *nom_fichier, const char *mode); 22:38 154 Les tableaux Les fichiers Modes d’ouverture : Mode Description "r" Ouvre un fichier en lecture. Le fichier doit exister. "w" Ouvre un fichier en écriture. Si le fichier existe, il est écrasé. "a" Ouvre un fichier en ajout (append). Si le fichier n'existe pas, il est créé. "r+" Ouvre un fichier en lecture et écriture. Le fichier doit exister. "w+" Ouvre un fichier en lecture et écriture. Le fichier est écrasé s'il existe. "a+" Ouvre un fichier en lecture et écriture. Les écritures sont ajoutées à la fin. Fermeture d'un fichier Une fois terminé avec un fichier, il est important de le fermer à l'aide de la fonction fclose pour libérer les ressources. Syntaxe : 22:38 int fclose(FILE *fichier); 155 Les tableaux Les fichiers Lecture et écriture dans un fichier texte – Lecture avec fscanf : Semblable à scanf, elle permet de lire des données formatées. FILE *fichier = fopen("example.txt", "r"); if (fichier == NULL) { printf("Erreur d'ouverture du fichier\n"); return 1; } char nom; int age; fscanf(fichier, "%s %d", nom, &age); printf("Nom : %s, Âge : %d\n", nom, age); fclose(fichier); 22:38 156 Les tableaux Les fichiers – Écriture avec fprintf : Semblable à printf, elle permet d’écrire des données formatées. FILE *fichier = fopen("example.txt", "w"); if (fichier == NULL) { printf("Erreur d'ouverture du fichier\n"); return 1; } fprintf(fichier, "Alice 30\n"); fclose(fichier); 22:38 157 Les tableaux Les fichiers Lecture et écriture caractère par caractère – Lecture avec fgetc : Lit un caractère à la fois. FILE *fichier = fopen("example.txt", "r"); if (fichier == NULL) { printf("Erreur d'ouverture du fichier\n"); return 1; } char c; while ((c = fgetc(fichier)) != EOF) { putchar(c); } 22:38 fclose(fichier); 158 Les tableaux Les fichiers – Écriture avec fputc : Écrit un caractère à la fois. FILE *fichier = fopen("example.txt", "w"); if (fichier == NULL) { printf("Erreur d'ouverture du fichier\n"); return 1; } fputc('A', fichier); fputc('\n', fichier); fclose(fichier); 22:38 159 Les tableaux Les fichiers Lecture et écriture dans un fichier binaire Pour les fichiers binaires, on utilise fread et fwrite. – Écriture : struct Personne { char nom; int age; }; FILE *fichier = fopen("personnes.dat", "wb"); if (fichier == NULL) { printf("Erreur d'ouverture du fichier\n"); return 1;} struct Personne p1 = {"Alice", 30}; fwrite(&p1, sizeof(struct Personne), 1, fichier); fclose(fichier); 22:38 160 Les tableaux Les fichiers – Lecture et écriture dans un fichier binaire Lecture : struct Personne p; FILE *fichier = fopen("personnes.dat", "rb"); if (fichier == NULL) { printf("Erreur d'ouverture du fichier\n"); return 1; } fread(&p, sizeof(struct Personne), 1, fichier); printf("Nom : %s, Âge : %d\n", p.nom, p.age); fclose(fichier); 22:38 161 Les tableaux Les fichiers Positionnement dans un fichier Les fonctions suivantes permettent de manipuler la position du curseur dans un fichier : 1. ftell(FILE *f) : Renvoie la position actuelle dans le fichier. 2. fseek(FILE *f, long offset, int origin) : Déplace le curseur à une position spécifique. origin peut être : – SEEK_SET : Début du fichier. – SEEK_CUR : Position actuelle. – SEEK_END : Fin du fichier. 3. rewind(FILE *f) : Ramène le curseur au début. 22:38 162 Les tableaux Les fichiers Gestion des erreurs – Toujours vérifier les opérations sur les fichiers pour s'assurer qu'elles ont réussi. Si une erreur survient, fopen renvoie NULL. – Exemple : FILE *fichier = fopen("inexistant.txt", "r"); if (fichier == NULL) { perror("Erreur d'ouverture du fichier"); return 1; } 22:38 163 Les tableaux Les fichiers – Gestion classique des erreurs dans les fichiers En C, pour manipuler les fichiers, on utilise généralement des vérifications explicites avec des conditions et des fonctions comme fopen, fclose, et perror. Exemple classique sans "try-catch" : #include int main() { FILE *fichier = fopen("inexistant.txt", "r"); if (fichier == NULL) { perror("Erreur : Impossible d'ouvrir le fichier"); return 1; // Code d'erreur } // Traitement du fichier printf("Fichier ouvert avec succès !\n"); fclose(fichier); return 0;} 22:38 164

Use Quizgecko on...
Browser
Browser