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 avec les tableaux


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 9
    Par défaut Problème avec les tableaux
    Bonsoir

    Je viens vous solliciter au sujet des tableaux et les pointeurs.

    J'ai vraiment du mal quand il s'agit de chaines ou de tableaux car si je comprends bien les tableaux se comportent comme des pointeurs, du coup je ne sais pas quand utiliser des & ..

    Merci de m'expliquer où sont mes erreurs et s'il y a moyen d'améliorer ce code.

    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
     
    float moyenne(float tableau[], float N) {
     
        int i;
        float moyenne = 0;
     
        for( i = 0; i < N; i++) {
            moyenne = moyenne + tableau[i];
        }
        moyenne = moyenne / N;
        return moyenne;
    }
     
    int main(void) {
        float b = 0;
        float N = 0;
        printf(" Combien de cases voulez-vous pour votre tableau");
        scanf("%lf", &N);
        float tableau[N];
        b = moyenne(tableau, N);
        printf("moyenne du tableau %lf \n", b);
     
        return 0;
    }
    Et les erreurs qui s'affichent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    test.c: In function ‘main’:
    test.c:21:2: warning: format ‘%lf’ expects argument of type ‘double *’, but argument 2 has type ‘float *’ [-Wformat=]
      scanf("%lf", &N);
      ^
    test.c:22:8: error: size of array ‘tableau’ has non-integer type
      float tableau[N];
            ^

  2. #2
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    - le warning c'est pour l'utilisation de type double au lieu de float, si vous voulez utiliser le float avec printf(), utilisez %f et non %lf
    - l'erreur est lié au dimension du tableau, puisque votre tableau est statique le compilateur doit connaitre la taille du tableau au moment de la compilation, ainsi une réservation statique d'un tableau en utilisant une variable n'est pas accepté! utilisez une constante qui contient le max des éléments possible.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    En fait, N ne devrait pas être un float. C'est une taille de tableau! Un tableau ne peut pas faire 3.14 cases!

    @cmoibal: Pour l'instant, ça n'a pas encore l'air de trop déranger le compilo. Thadeana compile peut-être en C99 ou C11.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 9
    Par défaut
    Je vous remercie infiniment pour vos réponses Le code marche ! Mais ... Il y a un problème au niveau de ce scanf

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf(" Combien de cases voulez-vous pour votre tableau\n");
    	scanf(" %d ", &N);
    J'ai mis des espaces au niveau du %d mais ça ne change rien. J'ai enlevé aussi les \n ... non plus !

    Voici la partie du code concernée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    printf(" Combien de cases voulez-vous pour votre tableau");
    	scanf("%d ",&N);
    	int tableau[1000];
    	for (i = 0; i < N; i++) {
    		scanf(" insérez la valeur n %d", &i);
    		scanf(" %d", &tableau[i]);
    	}
    e

    J'espère que je n'abuse pas trop avec mes questions. Je vous remercie d'avance !

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Thadeana Voir le message
    J'ai vraiment du mal quand il s'agit de chaines ou de tableaux car si je comprends bien les tableaux se comportent comme des pointeurs, du coup je ne sais pas quand utiliser des & ..
    Salut

    Ce n'est pas tout à fait bien formulé. Et donc peut-être que "mal formulé" = "mal compris"...
    Un tableau ne se comporte pas comme un pointeur. Un tableau, c'est un tableau.
    Simplement toutes les cases d'un tableau se suivent en mémoire. Donc si t'as l'adresse d'un de ses éléments, tu peux alors y accéder bien entendu mais tu peux aussi accéder à tous les autres. Et une adresse, elle, quand on la stocke, on la stocke dans un pointeur. A la limite on pourrait alors dire qu'un pointeur peut se comporter comme un tableau quoi.

    De plus, le nom d'un tableau, son nom brut, sans rien d'autre, correspond à l'adresse de son premier élément. C'est simplement un raccourci. Ainsi dans float tab[100], le nom tab équivaut à &tab[0]. Ce qui amène d'ailleurs ensuite l'arithmétique des pointeurs quand on dit que tab + x équivaut à &tab[x].

    Donc si une fonction a besoin de recevoir l'adresse d'un float, et que tu as un tableau de flottants à ta disposition, tu as le choix soit de lui passer tab + x (x pouvant être égal à 0 donc dans ce cas tu ne le mets pas), soit de lui passer &tab[x] (x pouvant être égal à 0 mais là il faut quand-même le mettre). Pour la fonction ce sera exactement la même chose.

    Citation Envoyé par Thadeana Voir le message
    Je vous remercie infiniment pour vos réponses Le code marche ! Mais ... Il y a un problème au niveau de ce scanf

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf(" Combien de cases voulez-vous pour votre tableau\n");
    	scanf(" %d ", &N);
    J'ai mis des espaces au niveau du %d mais ça ne change rien. J'ai enlevé aussi les \n ... non plus !
    Quel est le type de N ??? Eventuellement fonction complète STP...
    Et enlève les espaces, ce n'est pas ça. A la limite je te dirais même qu'il vaut mieux éviter scanf (qui pose plus de problèmes qu'elle n'en résout) mais si tu débutes ce n'est peut-être pas le moment...
    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]

  6. #6
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 9
    Par défaut
    Merci pour ton explication ! J'ai vraiment bien compris maintenant

    Pour ma deuxième question, j'ai fini par trouver mon erreur : J'ai mis un printf au lieu d'un scanf et donc du texte à l'intérieur Quelle étourdie je fais !

Discussions similaires

  1. Problème avec les tableaux de char.
    Par Letinono dans le forum Débuter
    Réponses: 3
    Dernier message: 29/05/2008, 16h24
  2. problème avec les tableaux
    Par scary dans le forum Débuter
    Réponses: 2
    Dernier message: 29/03/2008, 23h44
  3. Problème avec les tableaux de pointeurs
    Par TheDoci dans le forum C
    Réponses: 2
    Dernier message: 07/01/2007, 13h04
  4. [Débutant] Problèmes avec les tableaux.
    Par Lwq dans le forum C++
    Réponses: 6
    Dernier message: 01/11/2005, 12h54

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