Question rapide programme en C !

Question rapide programme en C ! - C - Programmation

Marsh Posté le 16-01-2008 à 12:20:55    

Voilà je suis en L2 et je dois creer un petit programme en C, cependant j'ai une erreur et je vois pas ou :( voici mon programme, quand je l'éxecute au moment d'entrer les valeurs de mon vecteur, il ne s'arrete plus alors qu'il devrait s'arreter quand i<dim, cepedant apparement il ne lis aucune valeur sur "dim" si quelqu'un pouvait me donner une piste svp :/ j'ai du mal avec les fonctions :o le probleme est au niveau de la fonction SAISIE

 

merci :(

 
 

#include <stdio.h>

 

typedef vect[10];

 

//Fonction taille du vecteur

 

int taille(int dim)
{
printf("Entrez la taille que vous souhaitez pour votre vecteur A\n" );
printf("Taille de A : " );
scanf("%d",&dim);
}

 

//Fonction saisie

 

int saisie(int dim, vect A)
{
int i;
   
 for(i=0;i<dim;i++)
 {
 printf("Saisissez la valeur %d du vecteur \n",i);
 printf("Valeur %d : ",i);
 scanf("%d",&A[i]);
}}

 

// Fonction affichage

 

int affiche(int dim,vect A)
{
int i;
 printf("Valeurs des %d elements du vecteur : \n",dim);
 for(i=0;i<dim;i++)
 printf("%tA[i] = %d \n",A[i]);  
   
}

 

int main(void)
{
int dim;
vect A;
taille(dim);
saisie(dim,A);
affiche(dim,A);
printf("Taille de A : %d",dim);

 


system("pause" );  
return(0);    
}


Message édité par ximothov le 16-01-2008 à 12:27:26

---------------
http://www.youtube.com/profile?user=ximothov
Reply

Marsh Posté le 16-01-2008 à 12:20:55   

Reply

Marsh Posté le 16-01-2008 à 12:47:01    

Juste une illustration de l'erreur type que tu fais:

Code :
  1. int taille(int dim)
  2. {
  3. printf("Entrez la taille que vous souhaitez pour votre vecteur A\n" );
  4. printf("Taille de A : " );
  5. scanf("%d",&dim);
  6. }


que tu appelles par taille(dim);
C'est un appel avec passage par valeur, donc ce n'est pas dim qui est transmis à la fonction taille, mais une copie. dim ne sera donc pas modifié par taille.
Si tu veux que dim soit modifié, il va falloir faire un passage par adresse:

Code :
  1. void taille(int *dimension) // evites de nommer le parametre comme la variable d'appel
  2.                                           // comme tu ne retournes rien, autant avoir un type retourné void
  3. {
  4. printf("Entrez la taille que vous souhaitez pour votre vecteur A\n" );
  5. printf("Taille de A : " );
  6. scanf("%d", dimension);
  7. }


que tu vas appeller par taille(&dim);
C'est une copie de &dim, l'adresse de dim, qui est transmis à la fonction taille, et cette copie pointe donc, comme l'original sur dim. scanf va modifier ce sur quoi pointe son second parametre, donc scanf va modifier dim.
A+,
 
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 16-01-2008 à 12:52:53    


gilou a écrit :

Juste une illustration de l'erreur type que tu fais:

Code :
  1. int taille(int dim)
  2. {
  3. printf("Entrez la taille que vous souhaitez pour votre vecteur A\n" );
  4. printf("Taille de A : " );
  5. scanf("%d",&dim);
  6. }


que tu appelles par taille(dim);
C'est un appel avec passage par valeur, donc ce n'est pas dim qui est transmis à la fonction taille, mais une copie. dim ne sera donc pas modifié par taille.
Si tu veux que dim soit modifié, il va falloir faire un passage par adresse:

Code :
  1. void taille(int *dimension) // evites de nommer le parametre comme la variable d'appel
  2.                                           // comme tu ne retournes rien, autant avoir un type retourné void
  3. {
  4. printf("Entrez la taille que vous souhaitez pour votre vecteur A\n" );
  5. printf("Taille de A : " );
  6. scanf("%d", dimension);
  7. }


que tu vas appeller par taille(&dim);
C'est une copie de &dim, l'adresse de dim, qui est transmis à la fonction taille, et cette copie pointe donc, comme l'original sur dim. scanf va modifier ce sur quoi pointe son second parametre, donc scanf va modifier dim.
A+,
 
 


 
Déjà merci de prendre du temps pour m'aider :jap:
 
alors j'ai demandé a un ami et au final j'ai a peu pres compris mes erreurs, je devais donc modifier ceci :
 


Au lieu de mettre :
 
int taille (int dim)
{
blabla
}
Il me fallait rajouter return(dim);


Idem pour les fonction int saisie(int dim, vect A) comme je ne retournais rien autant mettre void saisie(int dim, vect A)
 
et tout à la fin j'avais une erreur qui ne prenais pas en compte la dimension donc il me fallait definir "dim" en mettant "dim = taille(dim)"

Message cité 1 fois
Message édité par ximothov le 16-01-2008 à 12:53:17

---------------
http://www.youtube.com/profile?user=ximothov
Reply

Marsh Posté le 16-01-2008 à 13:19:03    

ximothov a écrit :


 
Déjà merci de prendre du temps pour m'aider :jap:
 
alors j'ai demandé a un ami et au final j'ai a peu pres compris mes erreurs, je devais donc modifier ceci :
 


Au lieu de mettre :
 
int taille (int dim)
{
blabla
}
Il me fallait rajouter return(dim);



Comme tu ne fais rien avec la valeur retournée, si tu gardes ton appel taille(dim); ca ne marchera pas mieux.
A la limite, si ton appel est ainsi: dim = taille(dim); ca marchera car tu mettras la valeur retournée dans dim.
Mais la méthode de fonction avec passage par adresse est la plus courante dans une telle situation. Autant maitriser cette technique de base rapidement.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed