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 :

Problème fonction remplissage matrice


Sujet :

C

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 15
    Points : 7
    Points
    7
    Par défaut Problème fonction remplissage matrice
    Bonsoir,

    J'ai besoin de votre aide pour mon programme. En effet, lorsque j'appelle ma fonction "creation_matrice_utilisateur()", celle-ci me retourne une matrice initialisée à 0, et non pas un matrice qui contient les valeurs entrées par un utilisateur comme je le voudrais. J'ai eu beau chercher ce qui ne va pas dans mon code, je ne trouve toujours pas, et c'est donc pour ça que je fais appel à vous !

    Le problème ne semble pas venir de la fonction affiche_matrice() car j'utilise celle-ci à d'autres endroits et elle fonctionne.

    Merci par avance pour votre aide !

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #include <time.h>
     
     
    struct matrice_s{
      int nb_lignes;
      int nb_cols;
      float **matrice;
    };
     
     
    void affiche_matrice (struct matrice_s *m){
      if (m == NULL){
          exit(0);
      }
      for (int i = 0; i < m->nb_lignes; i++){
        printf("\n");
        for (int j = 0; j < m->nb_cols; j++){
          printf("%10lf", m->matrice[i][j]);  // On affiche la matrice
        }
      }
      printf("\n");
    }
     
     
    struct matrice_s *creation_matrice (int nbr_lignes, int nbr_colonnes){
      struct matrice_s *mat = malloc(sizeof(struct matrice_s));  // On réserve l'espace de la matrice grâce au malloc
      mat->nb_lignes = nbr_lignes;
      mat->nb_cols = nbr_colonnes;
      mat->matrice = (float **)malloc(mat->nb_lignes*sizeof(float *));
      for (int i = 0; i < mat->nb_lignes; i++)
        mat->matrice[i] = (float *)calloc(mat->nb_cols, sizeof(float));  // On initialise la matrice en mettant toutes ses valeurs à 0 grâce au calloc
      //affiche_matrice(mat);
      return mat;
    }
     
     
    struct matrice_s * creation_matrice_utilisateur (){
      int lignes, colonnes, i, j;
      printf("Nombre de lignes de la matrice : ");
      scanf("%d", &lignes);  // L'utilisateur entre le nombre de lignes de la matrice
      printf("Nombre de colonnes de la matrice : ");
      scanf("%d", &colonnes);  // L'utilisateur entre le nombre de colonnes de la matrice
     
      struct matrice_s *m;
      m = creation_matrice(lignes, colonnes);  // On crée la matrice avec le nombre de lignes et de colonnes entrés par l'utilisateur
      printf("Veuillez entrer les éléments de la matrice.\n");
      for (i = 0; i < lignes; i++){
        for (j = 0; j < colonnes; j++){
          printf("Entrez la valeur de matrice[%d][%d] : ", i, j);
          scanf("%lf", &(m->matrice[i][j]));
        }
      }
      return m;
    }
     
     
     
    int main()
    {
        struct matrice_s *x = creation_matrice_utilisateur();
        affiche_matrice(x);
     
        return 0;
    }

  2. #2
    Membre expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 623
    Points : 1 554
    Points
    1 554
    Par défaut
    Hello,

    Ligne 53, il me semble que %lf c'est le format pour un double. Or tu as un float, donc %f . Les spécificateurs de printf() et scanf() peuvent ne pas avoir la même signification.
    On écrit "J'ai tort" ; "tord" est la conjugaison du verbre "tordre" à la 3ème personne de l'indicatif présent

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup pour ton aide ! Mon erreur était assez évidente quand on y pense mais au moins je ne la ferai plus maintenant

  4. #4
    Membre averti

    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 313
    Points : 354
    Points
    354
    Par défaut


    Avec les élèves j'essaie d'éviter la fonction scanf() autant que fscanf()...

    J'utilise des fonctions de saisie clavier de type chaînes de caractères puis je passe par les fonctions de conversion...

    Une fonction similaire à getline() puis les fonctions de type atoi(), atof(), ...

    ... double strtod(const char *restrict nptr, char **restrict endptr);
    float strtof(const char *restrict nptr, char **restrict endptr);
    long double strtold(const char *restrict nptr, char **restrict endptr);

    ...définies dans le header stdlib.h.
    Plus besoin de se faire ***r avec les "codes de formatages", sauf pour les afficher...

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par hurukan Voir le message
    Avec les élèves j'essaie d'éviter la fonction scanf() autant que fscanf()...
    Ca part d'une bonne intention mais il ne faut pas non plus tomber dans l'excès inverse et se radicaliser définitivement contre ces fonctions. Ce sont des outils, et tout outil sera très utile s'il est utilisé pour ce pour quoi il a été créé.
    scanf() par exemple sera pratique si stdin est redirigé depuis un pipe input contenant un flux correctement formaté. Ensuite fscanf(), si le fichier à traiter est bien calibré, pourra alors se révéler extrêmement utile. Et sscanf() montrera son plein potentiel pour traiter une string, string éventuellement lue via fgets() ou (comme tu le fais) via getline(). Elle pourra extraire de la string des éléments mélangés comme int et float (ce qui évite des combinaisons de strtol() et strtod()) en indiquant le nombre d'éléments correctement récupérés ce qui permet ainsi de vérifier le travail effectué...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Probléme extrapolation de matrice en fonction positions
    Par Jonathan1010 dans le forum Scilab
    Réponses: 0
    Dernier message: 03/05/2018, 15h29
  2. Problème avec remplissage d'une matrice
    Par zimamouche1 dans le forum Général Java
    Réponses: 7
    Dernier message: 26/06/2012, 14h22
  3. Réponses: 1
    Dernier message: 24/10/2011, 15h32
  4. Réponses: 2
    Dernier message: 05/06/2009, 16h08
  5. Réponses: 3
    Dernier message: 01/06/2009, 16h57

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