Langage C/Structures

Leçons de niveau 15
Une page de Wikiversité, la communauté pédagogique libre.
Début de la boite de navigation du chapitre
Structures
Icône de la faculté
Chapitre no 13
Leçon : Langage C
Chap. préc. :Tableaux
Chap. suiv. :Allocation dynamique
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « Langage C : Structures
Langage C/Structures
 », n'a pu être restituée correctement ci-dessus.

Définition[modifier | modifier le wikicode]

Voici un exemple concret sur la façon de définir une structure dans le langage c :

struct coordonees
{
	int x;
	int y;
	int z;
};

Cette structure comme vous pouvez le voir, contient trois sous variables de type "int" ! on peut donc créer nos propres types de donnés avec lesquels nous identifierons nos variable personnalisés. Celle-ci définis des coordonnés spatial (x;y;z), ce type de donnée ou bien cette structure peut s’avérer utile dans un programme qui gère des objets en 3D par exemple.

Comment utiliser des structures?[modifier | modifier le wikicode]

Supposons que l'on veuille créer un jeu et que l'on veuille stocker tous les meilleurs scores des joueurs. Il nous faudra déclarer trois variables, une stockera le score du joueur, la seconde, l'âge du joueur et la dernière pour le nom du joueur, qui sera donc une chaîne de caractères.

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int age=0;//création et intitalisation de la variable age 
    age=21;
    int score=0;//création et intitalisation de la variable score
    score=2400;
    char nom ="";//création et intitalisation de la chaine de caractère nom
    nom="JOUEUR01";
    
    
    
    return 0;
}

J'ai maintenant toutes les informations sur le joueur "JOUEUR01" que je peux par exemple stocker dans un fichier que j’appellerais "meilleur score".

Le problème est que cette méthode est trop longue si je veux manuellement entrer toutes les informations de 50 autres joueurs ! Que faire ?!

La solution est d'avoir recours aux structures en créant une structure qui contiendrait les 3 informations du joueur éléments :

#include <stdio.h>
#include <stdlib.h>

int main (){
struct JOUEUR
{
	char nom="";
	int age;
	int score;
};
struct JOUEUR Personne01;//voilà une variable de type JOUEUR créée
///mais comment acceder aux variables maintenant ?
////il faut juste ajouter un point après le nom de la variable de type "JOUEUR" suivi du nom de la sous variable ou sous élément
Personne01.nom="Joueur01"
Personne01.age=21;
Personne01.score=2400;
return 0;
}

Généralement les définitions des structures se fait dans un fichier header ".h", pour ne pas encombrer le fichier "main.c". Et pour éviter de répéter l’identifiant "struct" à chaque fois que l'on déclare une variable de type "JOUEUR par exemple" on ajoute quelques modifications à notre définition de structure comme suit

#include <stdio.h>
#include <stdlib.h>

int main (){
typedef struct JOUEUR JOUEUR; //
struct JOUEUR
{
	char nom="";
	int age;
	int score;
};
 JOUEUR Personne01;//voilà une variable de type JOUEUR créée //** vos voyez qu'on n'en a plus besoins de l'identifiant "struct"**/
Personne01.nom="Joueur01"
Personne01.age=21;
Personne01.score=2400;
return 0;
}

"typedef" veut dire je veux créer un type de donnée, les deux mots "JOUEUR" c'est eux qui définissent le type le premier permet de préciser quelle est le nom de la structure voulu le deuxième c'est le mot clé qui désignera notre type, ça s'appelle un alias... Donc cette nouvelle méthode de définition permet de créer un alias appelé "JOUEUR" qui remplacera tout le "struct JOUEUR"

Tableaux d'un type personnalisé,un tableaux de structures:[modifier | modifier le wikicode]

Et c'est là que se concentre tout l’intérêt des structures en C !

Reprenons depuis le début. Notre petit jeu est maintenant célèbre et est joué par trois personnes, et nous voulons enregistrer les scores de toutes les trois personnes comment faire ?

Et bien c'est simple il suffit de créer un tableaux de 3 cases en mémoire de type "JOUEUR" et chaque indice correspondra à un joueur particulier. La taille du tableau sera de "3", les joueurs seront enregistrés de l'indice "0" jusqu'à "2" :

#include <stdio.h>
#include <stdlib.h>

int main () {
    typedef struct JOUEUR JOUEUR;///oui de préférence dans un fichier ".h"
    struct JOUEUR {
        char nom ="";
        int age;
        int score;
    };
    ////////////////////////////////////
    JOUEUR listeDeJoueurs [3];//Création du tableau de type JOUEUR
    
    ///////////////entrer les joueurs ///////////
    
    listeDeJoueurs[0].nom="supergamer";/* joueur 1*/
    listeDeJoueurs[0].age=14;
    listeDeJoueurs[0].score=721;
    
    listeDeJoueurs[1].nom="Joueur01";/* joueur 2*/
    listeDeJoueurs[1].age=21;
    listeDeJoueurs[1].score=65800;
    
    listeDeJoueurs[2].nom="illiana075";/* joueur 3 */
    listeDeJoueurs[2].age=17;
    listeDeJoueurs[2].score=7350;

    return 0;
}