Pourtant simple ! ( C)

Résolu
Bonjour,
voila je n'arrive pas a résoudre se code assez simple ^^

il maffiche toujour la derniere valeur tapez en la repetant n fois .

#include <stdio.h>   
#include <stdlib.h>   
void affichage(double *km,int n);   
int main()   
{   
    int i,n;// n = trajet   
    double *km;// nombre de km parcourue stocket dans un tableau   
        printf("veuillez entrer le nombre de trajet effectuer :",n);// on demande le nombre de trajet   
        scanf("%d",&n);   
        km=malloc(n*sizeof(double));   
        for(i=0;i<n;i++){   
            printf("veuillez entrer le nombre de km parcourrue pour le trajet %d :",i+1);   
            scanf("%lf",km);   
            }   
    affichage(km,n);   




    return 0;   
}   
void affichage(double *km, int n){   

    int i;   

    for(i=0;i<n;i++){   
        printf("%lf",*km);   

        }   
    }   


merci de votre aide

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. déjà merci de ta réponse .
    effectivement c'était le scanf qui était a l'origine du problème et merci de tes conseil
    1. Contributeur
      Bonjour,

      Je me permets d'écrire même si tu as trouvé la solution car le code est faux, même si ça semble marcher...
      scanf("%lf",km);
      km est un pointeur sur un tableau de double. J'imagine que tu veux donc écrire dans chacune de ses cases.
      Pour ça, il faut mettre : scanf("%lf",&km[i]); ou plus simplement : scanf("%lf",km+i);

      printf("%lf",*km);
      Même si certains compilateurs ne râlent pas. Il faut mettre "%f" dans printf pour les double. Et là, tu n'affiches pas tous les éléments du tableau.
      Il faudrait donc mettre : printf("%f",km[i]);

      Sinon, petite remarque sur ta fonction affichage. Pourquoi faire passer le pointeur ? Autant mettre le prototype en : void affichage (double km, int n); et appeler la fonction par : affichage(*km, n); C'est mieux ainsi puisque affichage n'a pas lieu de modifier les variables.

      Et enfin, n'oublie pas non plus de mettre un free pour libérer la zone avec le return 0; final.

      Cdlt,
      1. comme tu ma pas rep j'ai trouvais tous seul il manquer le & a un endroit ....
        1. super sa repond pas a ma question ;)
          sinon je me debrouille bien avec les pointeurs .....
          1. Salut,

            comme tu le dis c'est plutôt simple : tu n'utilises pas la variable i dans tes boucles for. Je pense que tu n'es pas à l'aise avec le principe des pointeurs, et tu devrais commencer par faire des tutos dessus.

            ;)

            Discussions similaires

            vider la corbeille ?

            7 réponses