Rendre mon programme robuste

Fermé
akybienvenu Messages postés 48 Date d'inscription samedi 26 décembre 2015 Statut Membre Dernière intervention 4 novembre 2019 - Modifié par crapoulou le 9/04/2016 à 00:46
akybienvenu Messages postés 48 Date d'inscription samedi 26 décembre 2015 Statut Membre Dernière intervention 4 novembre 2019 - 13 avril 2016 à 03:19
salut,
j'ai fini un programme qui me permet le calcul des moyenne mais
j'ai des limites au niveau de la saisir des chaine de caractères (je ne peux pas mettre d'espace entre les chaine caractère ) j'ai essaye d'utiliser la fonction fget mais je n'arrive pas vraiment a l'utiliser dans mon programme et aussi je voudrais éviter de déclarer mes variables en variable globale.
excusez moi si mon programme ne pas assez lisible.
je précise que je suis un débutant merci
code
#include <stdio.h>
#include <stdlib.h>
 
int NbreIngenieurs;
int NbreDeMatieres;
int i;
int j;
 typedef struct
 {    char classe[100];
     char nom[100];
     char  prenom[200];
     int matricule;
     float note[150];
     float coefficient[20];
     float NoteCoefficienter;
     float LaMoyenne;
 }Ingenieur;
 typedef Ingenieur TableDesIng[15];
 TableDesIng t1;
  void presentation();
  void lire();
  void SaisirNotes();
  void moyenne();
 
 int main()
   {
     printf("bienvenue dans le programme qui vous permet de calculer vos moyennes\n");printf("\n");
     printf("voulez-vous calculer la moyenne de combien ingenieur??\n");scanf("%d",&NbreIngenieurs);printf("\n");
     printf("l'ingenieur a t-il compose dans combien de matiere?\n");scanf("%d",&NbreDeMatieres);printf("\n");
     printf("renseigner les informations de la liste\n");printf("\n");
     presentation(); printf("\n");
     SaisirNotes();  printf("\n");
     lire();         printf("\n");
     moyenne();      printf("\n");
 
     printf("............travail achever................\n");
     printf(".                                         .\n");
     printf(".                                         .\n");
     printf(".                                         .\n");
     printf("...........MIT Akyb vouz remercie..........\n");
 
    printf("Ce fichier a ete compile le %s a %s\n", __DATE__, __TIME__);
  }
 
void presentation()
   {
for(i=0;i<NbreIngenieurs;i++)
     {
        printf("entrez le nom de l'ingenieur %d\n ",i+1);scanf("%s",&t1[i].nom);
        printf("entrez le prenoms de l'engenieur %d\n ",i+1);scanf("%s",&t1[i].prenom);
        printf("entrez le matricule de l'ingeieur %d\n ",i+1);scanf("%d",&t1[i].matricule);
        printf("entrez la classe de l'ingenieur %d\n ",i+1);scanf("%s",&t1[i].classe);
     }
     printf("voici la liste\n");printf("\n");
     for(i=0;i<NbreIngenieurs;i++)
     {
        printf("Nom: %s Prenoms: %s Matricule: %dINP  Classe: %s",t1[i].nom,t1[i].prenom,t1[i].matricule,t1[i].classe);printf("\n");
     }
   }
void SaisirNotes()
  {   printf("LES DIFFERENTES MOYENNES OBTENUES PAR L'INGENIEUR DANS CHAQUE MATIERE SONT:\n");printf("\n");
       for(i=0;i<NbreIngenieurs;i++)
       { printf(" la moyenne obtenue par l'ingenieur %s\n ",t1[i].nom );printf("\n");
        for(j=0;j<NbreDeMatieres;j++)
            {   printf("dans la matiere : %d\n ", j+1);printf("\n");scanf("%f",&t1[i].note[j]);
                printf(" entrer le coefficient : %d\n",j+1);printf("\n");scanf("%f",&t1[i].coefficient[j]);
            }
       }
  }
void lire()
  {
     printf("les igenieurs et leur differentes moyennes suivit des coefficients \n");
    for(i=0;i<NbreIngenieurs;i++)
       {  printf("l'ingenieur : %s %s\n",t1[i].nom,t1[i].prenom );
           for(j=0;j<NbreDeMatieres;j++)
           {
               t1[i].NoteCoefficienter +=t1[i].coefficient[j]*t1[i].note[j];
           }
 
        printf(".........MOYENNE COEFFICIENTER.........:%f",t1[i].NoteCoefficienter) ;
        printf("\n\n");
 
       }
  }
void moyenne()
{
 
    float TotalDesNoteCoefficienter;
    float TotalDesCoefficient;
            TotalDesNoteCoefficienter = 0;// la valeur initiale est vitale
            TotalDesCoefficient = 0; // la valeur initiale est vitale
           float  LaMoyenne=0;
   printf("voici les moyennes des differents ingenieurs \n");
   for ( i=0 ; i<NbreIngenieurs ; i++ )
        {
      printf( "l'ingenieur : %s %s\n" , t1[i].nom , t1[i].prenom );
      for ( j=0 ; j<NbreDeMatieres ; j++ )
           {
         TotalDesNoteCoefficienter += t1[i].note[j]*t1[i].coefficient[j]; // cumul des notes coefficientées
 
         TotalDesCoefficient += t1[i].coefficient[j];  // cumul des tous les coef
            } // on fin de la 2ieme boucle for ici
 
      t1[i].LaMoyenne=( TotalDesNoteCoefficienter/TotalDesCoefficient);
 
       printf( "SA MOYENNE EST : \n"  );
       printf("\n\n");
       printf(".                                         .\n");
       printf("...........................................\n");
       printf(".             est %f                      .\n", t1[i].LaMoyenne );
       printf("...........................................\n");
 
       TotalDesNoteCoefficienter = 0;// la valeur initiale est vitale
       TotalDesCoefficient = 0;     // la valeur initiale est vitale
 
 
     }  //fin de la la 1ere boucle for
}

1 réponse

[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 12/04/2016 à 12:50
Salut akybienvenu,

j'ai des limites au niveau de la saisir des chaine de caractères (je ne peux pas mettre d'espace entre les chaine caractère )

Si tu veux dire qu'en utilisant scanf, tu n'arrives pas à récupérer une saisie complète si elle comporte un espace, tu peux faire ceci en contrôlant de plus la quantité de caractères lus au maximum par scanf :

    char ch[100]={0};
    int c;

    if (scanf("%99[^\n]",ch) == 1) {
        printf("J'ai récupéré : [%s]\n", ch);
        /* scanf n'inclue pas \n qui reste toujours dans
         * le flux, qu'il faut donc purger, autrement, il sera 
         * lu par un prochain scanf.
         * Utiliser la boucle suivante pour purger le flux stdin
         */
        while ((c = getchar()) != '\n' && c != EOF)
            /* discard */ ;
    }


j'ai essaye d'utiliser la fonction fget mais je n'arrive pas vraiment a l'utiliser dans mon programme

tu veux dire fgets ?

Si oui, vois http://www.faqs.org/faqs/C-faq/faq/ et le code proposé à la réponse à la question 7.1

et aussi je voudrais éviter de déclarer mes variables en variable globale.

Déclare les dans main, et passe les en arguments à tes fonctions.


Dal
0
akybienvenu Messages postés 48 Date d'inscription samedi 26 décembre 2015 Statut Membre Dernière intervention 4 novembre 2019
Modifié par akybienvenu le 13/04/2016 à 03:19
bonsoir, Dal
l et merci pour tes réponses
0