IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Programme Calcul de moyenne


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 5
    Points
    5
    Par défaut Programme Calcul de moyenne
    Bonjour,

    Je souhaiterais faire un programme qui demande à l'utilisateur de saisir n etudiants, de récupérer ce nombre et d'en faire une allocation dynamique.

    On demande ensuite de saisir le nom de l'étudiant ensuite la note.
    Ces réponses sont ensuite stockés dans un fichier avec le format suivant :


    La note doit toujours se trouver à cet endroit. (J'en aurai besoin plus tard pour mes calculs).

    Je souhaite que le nom et les noms soit stockés dans des tableaux de type char [10+1] et note [5+1].

    J'ai fait un début de code mais à ce stade je suis bloqué.
    Je n'arrive pas à écrire dans le fichier et je ne vois pas comment faire en sorte que la note soit toujours au meme endroit dans ce fichier.

    Si quelqu'un pouvait m'éclairer
    Merci par avance.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void)
    {
     
    char * saisie(void); // prototype de la fonction saisie
    void lecture(float); // prototype de la fonction afficher
     
    saisie(); //appel de la fonction saisie
     
    }
     
     
     
     
    char * saisie (void) {
     
     
        int nbretudiant=0, i=0;
     
        //char nom [10+1];
        //char age [5+1];
     
        char [10+1] nom;
        char [5+1] note;
     
        // On demande le nombre de notes à l'utilisateur
        printf("Combien d'etudiants ? ");
        scanf("%d", &nbretudiant);
     
        FILE*f;
        f=fopen("c:\\etudiants.txt","w+");
     
       if (nbretudiant > 0) // Il faut qu'il ait au moins une note
        {
              nom = malloc(nbretudiant * sizeof(char));
              note = malloc(nbretudiant * sizeof(char));
     
           if (nom == NULL) // On vérifie si l'allocation a marché ou pas
           {
                exit(0); // On arrête tout
           }
     
            // On demande le nom des amis un à un
            for (i = 0 ; i < nbretudiant ; i++)
            {
                printf("Nom de l'eleve numero %d ? \n", i + 1);
                scanf("%s", &nom[i]);
                //printf("nom de l'elève %s",&nom[i]);
     
     
                printf("Note de l'eleve numero %d ? \n",i + 1);
                scanf("%s", &note[i]);
     
            }
     
            // On affiche les âges stockés un à un
            printf("\n\nVos etudiants ont les notes suivantes :\n");
            for (i = 0 ; i < nbretudiant ; i++)
            {
     
     
     
                //fgets(f,"%s", &nom[i]);
                //fgets(f,": %s",&note[i]);
     
     
     
     
     
            }
     
            fclose(f);
     
            // On libère la mémoire allouée avec malloc, on n'en a plus besoin
            free(nom);
            free(note);
     
        }
     
        return 0;
     
    }

  2. #2
    Membre habitué
    Profil pro
    DSI
    Inscrit en
    Mai 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DSI

    Informations forums :
    Inscription : Mai 2009
    Messages : 120
    Points : 188
    Points
    188
    Par défaut
    Bonjour,

    peut être en utilisant des tabulations plutot que des espace entre tes notes et tes eleves, normalement tes notes devraient apparaitrent sur la meme colonne.

    Par contre il faut prevoir un nombre de tabulation assez grand pour ne pas avoir de surprise (par exemple si tu met 1 tabulations et que tu as un nom composé ca risque de pas etre bien aligné.)

    J'éspère avoir compris ton problème, et je dirais que cette "solution" que je donne n'est qu'une astuce rapide mais qui doit fonctionner.

    D'ailleur attention, si tu affiches ton programme dans une console je ne suis pas sur que les tabulations soit bien traités, par conséquent seul dans ton fichier tu auras le bon résultat.

    Bonne journée

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Salut Merci pour ta réponse mais l'utilisation des espaces est un pré-requis.

    Mais pour l'instant le soucis c'est que je n'arrive pas à utiliser malloc avec les char que j'ai défini. Impossible de compiler le programme et donc d'écrire dans le fichier.

  4. #4
    Membre habitué
    Profil pro
    DSI
    Inscrit en
    Mai 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DSI

    Informations forums :
    Inscription : Mai 2009
    Messages : 120
    Points : 188
    Points
    188
    Par défaut
    Rebonjour, donc si j'ai bien compris tu as une liste de notes et de noms sous forme de char donc en faite tu un tableau et dedans un char * pour chaque note et chaque nom :

    nom[0][0...100] = "etudiant1\0"
    ...
    nom[n][0...100] = "etudiant n\0"

    Et pareil pour les notes.

    Essaye quelque chose de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    char **nom;
    char **note;
     
    nom = malloc(nbretudiant);            //Ici un tableau du nombre d'etudiant
    note = malloc(nbretudiant);           //Pareil
     
    //Allocation des sous tableaux pour les scanf
    for ( i = 0; i < nbretudiant; i++){
             nom[i] = malloc(sizeof(char) * 100);  //100 char possible pour le nom
             note[i] = malloc(sizeof(char) * 10);  //10 char possible pour la note
    }
     
    //Les scanf :
     
    scanf("%s", &nom[i][0]);   
    scanf("%s", &note[i][0]);
    //Pour chaque eleve i, utilisation de l'adresse du début du sous-tableau
     
    //Pour afficher correctement on fait pareil :
    printf("%s : %s\n", &nom[i][0], &note[i][0]);
     
    //Ne pas oublier de liberer la memoire 
    for ( i = 0; i < nbretudiant; i++){
                free(nom[i]);
                free(note[i]);
    }
     
    free(nom);     
    free(note);
    //J'ai pas fait de c depuis un moment si quelqu'un peut confirmer que les deux derniers free sont utiles.

    Quelque chose dans ce genre devrait mieux fonctionner.

    Bonne journée

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    J'ai suivi tes conseils.

    Mon programme ressemble à ça maintenant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void)
    {
     
    char saisie(void); // prototype de la fonction saisie
    void lecture(float); // prototype de la fonction afficher
     
    saisie(); //appel de la fonction saisie
     
    }
     
     
     
     
    char saisie (void) {
     
     
        int nbretudiant=0, i=0;
     
        char **nom;
        char  **note;
     
     
        // On demande le nombre de notes à l'utilisateur
        printf("Combien d'etudiants ? ");
        scanf("%d", &nbretudiant);
     
     
        nom = malloc(nbretudiant);            //Ici un tableau du nombre d'etudiant
        note = malloc(nbretudiant);           //Pareil
     
        for ( i = 0; i < nbretudiant; i++){
             nom[i] = malloc(sizeof(char) * 100);  //100 char possible pour le nom
             note[i] = malloc(sizeof(char) * 10);  //10 char possible pour la note
    }
     
     
        FILE*f;
        f=fopen("c:\\etudiants.txt","w+");
     
            // On demande le nom des amis un à un
            for (i = 0 ; i < nbretudiant ; i++)
            {
                printf("Nom de l'eleve numero %d ? \n", i + 1);
                scanf("%s", &nom[i][0]);
                //printf("nom de l'elève %s",&nom[i]);
     
     
                printf("Note de l'eleve numero %d ? \n",i + 1);
                scanf("%s", &note[i][0]);
     
     
            }
     
            // On affiche les âges stockés un à un
            printf("\n\nVos etudiants ont les notes suivantes :\n");
            for (i = 0 ; i < nbretudiant ; i++)
            {
                fprintf("f,%s : %s\n", &nom[i][0], &note[i][0]);
     
     
     
            }
     
            fclose(f);
     
            // On libère la mémoire allouée avec malloc, on n'en a plus besoin
            free(nom);
            free(note);
     
            for ( i = 0; i < nbretudiant; i++){
                free(nom[i]);
                free(note[i]);
    }
            return 0;
     
        }
    Maintenant je voudrais faire en sorte que la note se trouve toujours à la même position malgré la longueur du nom.

    Merci en tout cas j'ai bien avancé.

  6. #6
    Membre habitué
    Profil pro
    DSI
    Inscrit en
    Mai 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DSI

    Informations forums :
    Inscription : Mai 2009
    Messages : 120
    Points : 188
    Points
    188
    Par défaut
    Rebonjour,

    partons du principe qu'un nom fait au maximum 20 char alors on peut tres bien dire que on aligne sur le 21 char les notes.

    Par conséquent il suffit de prendre les noms et de rajouter des espaces a la fin

    Exemple :

    nom[1] = "jean"

    jean = 4 char donc il manque 16 char pour arriver a 20 (\0 non compris)

    on peut faire quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //Fin du nom
    int depart = strlen(nom[1]);
     
    //On ajoute des espaces
    for (i = depart; i < 20; i++){
       nom[1][i] = ' ';
    }
    //On ajoute un caractere de fin
    nom[1][i] = '\0';
     
    printf ("%s %s", &nom[1][0], &note[1][0]);
    Normalement en appliquant une transformation de cette sorte les notes devraient etre alignées.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Ok merci je comprend le principe.

    Par contre ce code doit venir remplacer mon ancienne boucle celle qui écris dans le fichier à savoir ?? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       for (i = 0 ; i < nbretudiant ; i++)
          {
     
     
                fprintf(f,"%s  %s\n", &nom[i][0], &note[i][0]);
     
     
     
           }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf ("%s %s", &nom[1][0], &note[1][0]);
    le i est devenu un 1 ici, je comprend pas.

    Merci encore

  8. #8
    Membre habitué
    Profil pro
    DSI
    Inscrit en
    Mai 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DSI

    Informations forums :
    Inscription : Mai 2009
    Messages : 120
    Points : 188
    Points
    188
    Par défaut
    Bonjour,
    je ne vous ai pas donné le code complet seulement un exemple sur l'éléve numéro 1 à vous d'adapter cela pour tout vos élèves.

    Bonne journée

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    J'ai un peu de mal à implémenter ta solution.

    Par contre, si je découpe le fprintf et que entre les deux j'arrive à déplacer mon curseur à la position 11 par exemple.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     for (i = 0 ; i < nbretudiant ; i++)
            {
                //fprintf(f,"%s %s\n", &nom[i][0], &note[i][0]);
                fprintf(f,"%s",&nom[i][0]);
     
               //fonction qui permettrait de déplacer le curseur
     
                fprintf(f,"%s\n",&note[i][0]);
     
     
     
     
     
            }
    Seulement je ne trouve pas la fonction qui permettrait ce déplacement de curseur. J'ai entendu parlé de fseek mais comment l'implémenter dans mon cas.

    Merci

  10. #10
    Membre habitué
    Profil pro
    DSI
    Inscrit en
    Mai 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DSI

    Informations forums :
    Inscription : Mai 2009
    Messages : 120
    Points : 188
    Points
    188
    Par défaut
    Re re re re bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%s", &nom[i][0]);
    A cet endroit tu stock dans nom le nom entre dans le clavier il suffit donc a cet endroit de transformer le nom.

    Tu peux par exemple faire une fonction qui applique la transformation ou la faire directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    scanf("%s", &nom[i][0]);
     
    int depart = strlen(nom[i]);
     
    int j;
     
    //On ajoute des espaces
    for (i = depart; i < 20; i++){
       nom[i][j] = ' ';
    }
    //On ajoute un caractere de fin
    nom[i][j] = '\0';

    Avec une fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     
    void transform(char *nom){
     
       int depart = strlen(nom);
       int i;
     
       //On ajoute des espaces
      for (i = depart; i < 20; i++){
          nom[i] = ' ';
      }
      //On ajoute un caractere de fin
      nom[i] = '\0';
     
    }
     
     
    //Au niveau du scanf :
    scanf("%s", &nom[i][0]);
     
    transform(&nom[i][0]);

    Pour info strlen se trouve dans string.h

    Bonne soirée

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Bonsoir,

    J'ai implémenté ta solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
     
    int main(void)
    {
     
    char saisie(void); // prototype de la fonction saisie
    void lecture(float); // prototype de la fonction afficher
     
     
    saisie(); //appel de la fonction saisie
     
    }
     
     
     
     
    char saisie (void) {
     
     
        int nbretudiant=0, i=0;
     
        char **nom;
        char  **note;
     
     
        // On demande le nombre de notes à l'utilisateur
        printf("Combien d'etudiants ? ");
        scanf("%d", &nbretudiant);
     
     
        nom = malloc(nbretudiant);            //Ici un tableau du nombre d'etudiant
        note = malloc(nbretudiant);           //Pareil
     
        for ( i = 0; i < nbretudiant; i++){
             nom[i] = malloc(sizeof(char) * 100);  //100 char possible pour le nom
             note[i] = malloc(sizeof(char) * 10);  //10 char possible pour la note
    }
     
     
        FILE*f;
        f=fopen("c:\\etudiants.txt","w+");
     
            // On demande le nom des amis un à un
            for (i = 0 ; i < nbretudiant ; i++)
            {
                printf("Nom de l'eleve numero %d ? \n", i + 1);
                scanf("%s", &nom[i][0]);
                transform(&nom[i][0]);
     
     
     
                printf("Note de l'eleve numero %d ? \n",i + 1);
                scanf("%s", &note[i][0]);
     
     
            }
     
            // On affiche les âges stockés un à un
            //printf("\n\nVos etudiants ont les notes suivantes :\n");
            for (i = 0 ; i < nbretudiant ; i++)
            {
                fprintf(f,"%s %s\n", &nom[i][0], &note[i][0]);
                //fprintf(f,"%s",&nom[i][0]);
               // fprintf(f,"%s\n",&note[i][0]);
     
     
     
     
     
            }
     
            fclose(f);
     
            // On libère la mémoire allouée avec malloc, on n'en a plus besoin
            free(nom);
            free(note);
     
            for ( i = 0; i < nbretudiant; i++){
                free(nom[i]);
                free(note[i]);
    }
            return 0;
     
        }
     
     
     
    void transform(char *nom){
     
       int depart = strlen(nom);
       int i;
     
       //On ajoute des espaces
      for (i = depart; i < 12; i++){
          nom[i] = ' ';
      }
      //On ajoute un caractere de fin
      nom[i] = '\0';
     
    }
    Le problème c'est que je peux seulement le faire marché avec 2 étudiants au plus. Sinon le programme bug.

  12. #12
    Membre habitué
    Profil pro
    DSI
    Inscrit en
    Mai 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DSI

    Informations forums :
    Inscription : Mai 2009
    Messages : 120
    Points : 188
    Points
    188
    Par défaut
    Bonsoir,

    Oui c'est de ma faute il manque un petit truc dans l'allocation, voici le code que j'ai utilisé pour votre application

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
     
     
    void transform(char *nom)
    {
     
        int depart = strlen(nom);
        int i;
     
     
        for (i = depart; i < 12; i++)
        {
            nom[i] = ' ';
        }
     
        nom[i] = '\0';
     
    }
     
     
    void saisie (void)
    {
     
     
        int nbretudiant=0, i=0;
     
        char **nom;
        char  **note;
     
     
    FILE *f;
        printf("Combien d'etudiants ? ");
        scanf("%d", &nbretudiant);
     
     
        nom = malloc(nbretudiant * sizeof(char**));
        note = malloc(nbretudiant * sizeof(char**));
     
        for ( i = 0; i < nbretudiant; i++)
        {
            nom[i] = malloc(sizeof(char *) * 100);
            note[i] = malloc(sizeof(char *) * 10);
        }
     
     
        for (i = 0 ; i < nbretudiant ; i++)
        {
            printf("Nom de l'eleve numero %d ? \n", i + 1);
            scanf("%s", &nom[i][0]);
            transform(&nom[i][0]);
     
     
     
            printf("Note de l'eleve numero %d ? \n",i + 1);
            scanf("%s", &note[i][0]);
     
     
        }
     
     
        f=fopen("etudiants.txt","w+");
     
       for (i = 0 ; i < nbretudiant ; i++)
        {
            fprintf(f, "%s %s\n", nom[i], note[i]);
        }
     
        fclose(f);
     
     
        for ( i = 0; i < nbretudiant; i++)
        {
            free(nom[i]);
            free(note[i]);
        }
        free(nom);
        free(note);
     
    }
     
     
     
    int main(int argc, char *argv[])
    {
     
        saisie();
        return 0;
    }

    J'ai ajouté les sizeof(char **) et sizeof(char *) et changé l'ordre de certaines choses qui etaient incoherentes.

    Bonne soirée

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Merci de ton aide précieuse ça fonctionne nickel.

    Il me reste plus qu'a implémenté ma dernière fonction qui va faire la moyenne des notes et extraire le nom des élèves qui ont moins de 10.

    Je reviendrais sur ce sujet si j'ai des soucis

  14. #14
    Membre habitué
    Profil pro
    DSI
    Inscrit en
    Mai 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DSI

    Informations forums :
    Inscription : Mai 2009
    Messages : 120
    Points : 188
    Points
    188
    Par défaut
    N'hesite pas a poser des questions, je ne suis pas bien bon mais je t'aiderai dans la mesure de mes moyens ^^

  15. #15
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    printf permet d'aligner la sortie sans travail supplémentaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%-10s %05.2f\n", "dupond", 10.50);
    Ici on demande que le nom soit aligné au gauche (-) et qu'il soit complété par des espaces pour prendre 10 caractères (10). La note passé comme un double doit être complétée par des zero (0) et s'étendre sur 5 caractères (5) avec deux caractères après la virgule (.2).

    Il est même possible de passer la largeur d'un champs en argument du printf. Par exemple si tu calcules dans "maxlen" la longueur du nom le plus long, tu peux faire un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%-*s %05.2f\n", maxlen, "dupond", 10.50);

  16. #16
    Membre habitué
    Profil pro
    DSI
    Inscrit en
    Mai 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DSI

    Informations forums :
    Inscription : Mai 2009
    Messages : 120
    Points : 188
    Points
    188
    Par défaut
    Bonsoir, est ce que cela fonctionne aussi avec fprintf ?

    Parceque cela est vraiment sympa si c'est le cas.

  17. #17
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Non, malheureusement les concepteurs du langage C ont décidé de brider la fonction fprintf() par rapport à sont petit frère printf().

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Merci Matafan.

    Au niveau du calcul de la moyenne.
    Je suppose que je dois ouvrir mon fichier et lire les notes qui se trouve à la position 11 par exemple et ensuite les stockés dans un tableau.

    A partir de ce tableau, je peux alors faire mon calcul de moyenne je suppose.

  19. #19
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Pour le fprintf() c'était un blague hein, évidemment fprintf() fait tout ce que fait printf(). D'ailleurs je suppose que printf() appelle en fait fprintf().

  20. #20
    Membre habitué
    Profil pro
    DSI
    Inscrit en
    Mai 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DSI

    Informations forums :
    Inscription : Mai 2009
    Messages : 120
    Points : 188
    Points
    188
    Par défaut
    Pourquoi ne pas faire tes moyennes avant d'enregistrer le fichier ?

    Sinon pourquoi charger tes notes en char * et pas en float ?

    Enfin si tu veux garder tout ca tel quel, il faut lire le fichier recuperer les données lignes par ligne stoquer les notes faire la moyenne et apres faire ce que tu desires.

    En même je ne sais pas trop ou tu veux aller, pour le moment j'essaye juste de répondre aux questions qui arrivent.

Discussions similaires

  1. programme calculant les moyennes depuis un fichier
    Par mooshu dans le forum Général Python
    Réponses: 3
    Dernier message: 25/06/2013, 20h11
  2. Programme calcul de valeur moyenne
    Par PhyRen dans le forum Fortran
    Réponses: 4
    Dernier message: 20/08/2011, 18h40
  3. Programmation Shell avec Red Hat Calcul de moyenne
    Par jcpoulard dans le forum Linux
    Réponses: 3
    Dernier message: 22/02/2006, 22h08
  4. calculer une moyenne avec une requete externe
    Par allowen dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/01/2005, 16h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo