Vous êtes sur la page 1sur 4

HAMIDOUCHE B2

Nohlan

Language C partiel

Définition contextuelle des opérateurs :

1. # : C'est l'opérateur de préprocesseur utilisé pour définir des macros à l'aide de la directive
#define, comme dans #define MAX 20.

2. -> : Cet opérateur est utilisé pour accéder aux membres d'une structure à travers un
pointeur. Par exemple, pt_e->nom accède au membre nom de la structure pointée par pt_e.

3. . : Cet opérateur est utilisé pour accéder aux membres d'une structure à travers une variable.
Par exemple, e.nom accède au membre nom de la structure e.

4. * : Cet opérateur est utilisé pour déclarer des pointeurs ou pour déréférencer un pointeur.
Par exemple, struct etudiant *pt_sur_etu déclare un pointeur vers une structure etudiant, et
*pt_e déréférence le pointeur pt_e.

5. \n : C'est un caractère d'échappement représentant une nouvelle ligne dans les chaînes de
caractères.

6. \t : C'est un caractère d'échappement représentant une tabulation dans les chaînes de


caractères.

7. [] : Cet opérateur est utilisé pour accéder aux éléments d'un tableau. Par exemple, e.nom[1]
accède au deuxième caractère de la chaîne nom de la structure e.

8. () : Ces parenthèses sont utilisées pour regrouper des expressions mathématiques ou pour
déclarer des fonctions. Par exemple, scanf("%s", e.prenom) est une fonction qui lit une
chaîne de caractères depuis l'entrée standard et la stocke dans prenom.

9. & : Cet opérateur est utilisé pour obtenir l'adresse d'une variable. Par exemple, &e renvoie
l'adresse de la variable e.

10. {} : Ces accolades sont utilisées pour délimiter le début et la fin des blocs de code, comme
dans les fonctions ou les structures.

11. ; : C'est le symbole de fin d'instruction en C. Chaque instruction doit se terminer par un
point-virgule.

12. <> : Cela sert à définir les bibliothèques utilisé dans le code .

Pourquoi utiliser un getchar() ?

Lorsque on utilise scanf() pour lire un caractère (%c), le programme lit le caractère entré par
l'utilisateur, mais il laisse également dans le flux d'entrée le caractère de nouvelle ligne ('\n') que
l'utilisateur a tapé en appuyant sur Entrée.

Ce caractère de nouvelle ligne peut être interprété comme une entrée vide lors des prochaines
lectures de caractères. Par exemple, si on a utilisé scanf("%c", &variable_char); juste après un
scanf("%d", &variable_int); , le scanf("%c", &variable_char); aurait immédiatement lu le caractère
de nouvelle ligne laissé par la touche Entrée après que l'utilisateur ait entré un nombre entier.

Pour éviter cela, on utilise getchar() après scanf() pour consommer ce caractère de nouvelle ligne.
Cependant, cette approche n'est pas optimale, car elle peut causer des problèmes si le caractère
entré par l'utilisateur n'est pas une nouvelle ligne.

Voici le code commenté et modifié via l’usage de typedef :

#include <stdio.h> // Inclusion de la bibliothèque standard pour les


entrées/sorties
#include <string.h> // Inclusion de la bibliothèque pour la manipulation des
chaînes de caractères

#define MAX 20 // Définition d'une constante MAX égale à 20

// Définition d'une structure Etudiant


typedef struct {
char nom[MAX]; // Champ pour stocker le nom de l'étudiant
char prenom[MAX]; // Champ pour stocker le prénom de l'étudiant
float moyenne; // Champ pour stocker la moyenne de l'étudiant
} Etudiant;

// Déclaration de prototypes de fonctions


void afficher_etudiant(Etudiant un_etu); // Fonction pour afficher les détails
d'un étudiant
void saisie_etudiant(Etudiant *pt_sur_etu); // Fonction pour saisir les
détails d'un étudiant

// Fonction principale
int main() {
// Initialisation de quelques étudiants avec leurs noms, prénoms et
moyennes
Etudiant genie = { "vous", "non ?", 18.7 };
Etudiant cancre = { "l'autre", "c'est normal", 3.2 };
Etudiant jean, *paul, philippe, amir; // Déclaration d'autres étudiants
sans initialisation

// Initialisation d'un étudiant 'e' avec des valeurs spécifiques et un


pointeur 'pt_e' vers 'e'
Etudiant e = { "jean", "seigne", 18.8 }, *pt_e;
pt_e = &e; // Affectation de l'adresse de 'e' à 'pt_e'
// Affichage des détails de 'e' de deux manières différentes
printf("premiere possibilite\n");
printf("%s \t", e.nom);
printf("%s \t", e.prenom);
printf("%f\n", e.moyenne);
printf("deuxieme possibilite\n");
printf("%s", pt_e->nom);
printf("%s ", pt_e->prenom);
printf("%f\n", pt_e->moyenne);

// Modification de la moyenne et du nom de 'e'


e.moyenne = 10.0;
strcpy(e.nom, "poubot");
printf("Nom %s Moyenne %f\n", pt_e->nom, e.moyenne);

// Saisie du prénom de 'e' et modification de la moyenne via le pointeur


'pt_e'
printf("entrez un prenom : \n");
scanf("%s", e.prenom);
pt_e->moyenne = 19.0;

// Saisie du nom de 'e' et modification de certains caractères dans


'e.nom' et 'pt_e->nom'
printf("entrez un nom : \n");
scanf("%s", pt_e->nom);
e.nom[1] = 'v';
pt_e->nom[2] = 'y';

// Affichage des noms modifiés


printf("e.nom %s\n", e.nom);
printf("pt_e-> nom %s\n", pt_e->nom);

// Saisie d'un caractère dans 'e.nom[3]' et 'pt_e->nom[4]'


printf("entrez un caractere :\n");
scanf(" %c", &(e.nom[3]));
e.nom[3] = getchar(); // Lecture d'un caractère supplémentaire
printf("e.nom %s\n", e.nom);
printf("\n");

printf("entrez un caractere :\n");


scanf(" %c", &(pt_e->nom[4]));
pt_e->nom[4] = getchar(); // Lecture d'un caractère supplémentaire
printf("pt_e->nom %s\n", pt_e->nom);
printf("\n boucle for\n");
// Boucle pour afficher chaque caractère du nom de l'étudiant pointé par
'pt_e'
for(int i = 0; i < strlen(pt_e->nom); i++)
printf("i %d Nom %c\t", i, pt_e->nom[i]);
printf("\n fin boucle for\n");
printf(" \nEntrez la moyenne : \n");
scanf("%f", &(pt_e->moyenne));
printf("pt e->moyenne : %f \n", pt_e->moyenne);

// Appel de la fonction pour saisir les détails d'un étudiant et afficher


ces détails
saisie_etudiant(&e);
afficher_etudiant(e);

return 0; // Indique que le programme s'est terminé avec succès


}

// Fonction pour afficher les détails d'un étudiant


void afficher_etudiant(Etudiant un_etu) {
printf("\nDebut Fonction Affiche\n");
printf("\n nom : %s", un_etu.nom);
printf("\n prenom : %s ", un_etu.prenom);
printf("\n moyenne : %f", un_etu.moyenne);
printf("\nFin Fonction Affiche\n");
}

// Fonction pour saisir les détails d'un étudiant


void saisie_etudiant(Etudiant *un_pt_sur_etu) {
printf("\nDebut Fonction Saisie\n");
printf("\n saisir nom : ");
scanf(" %s", un_pt_sur_etu->nom);
printf("\n saisir prenom : ");
scanf(" %s", un_pt_sur_etu->prenom);
printf("\n saisir moyenne: ");
scanf("%f", &un_pt_sur_etu->moyenne);
printf("\nFin Fonction Saisie \n");
}

Vous aimerez peut-être aussi