passage de parametres a 1 fonction pb de retour

passage de parametres a 1 fonction pb de retour - C - Programmation

Marsh Posté le 13-12-2004 à 18:16:37    

Bonjour,
Merci pour ce forum très utile. J'ai un petit soucis de retour de parametre :
j'ai appele dans le main() une fonction saisie avec 2 parametres - un entier qui me reservira après pour efectuer des operations de calcul, et un pointeur sur tableau. int N=0;int *P=POINTS;saisie(N,P); (fonction declaree _int saisie(int,int *);_)
la fonction saisie_ int saisie(int N,int *X)_ se charge de la saisie de l'entier puis des valeur tableau X[i]:
Comment puis-je retourner au programme principal et l'entier saisi et le tableau ? sachant qu'en C on ne peut retourner qu'une valeur ? (j'ai besoin de ces deux paramètres pour une prochaine fonction d'affichage et une autre de calcul (moyenne, maximum, somme etc.))
Merci de m'indiquer un peu le chemin a suivre si il ya bien une solution...


---------------
nationale85
Reply

Marsh Posté le 13-12-2004 à 18:16:37   

Reply

Marsh Posté le 13-12-2004 à 18:28:54    

tu mets dans une structure ou tu passes des arguments de sortie par pointeur

Reply

Marsh Posté le 13-12-2004 à 19:09:50    

Salut Taz, pour l'instant, je ne fais pas encore de structure et donc je passe par les pointeurs. J'ai bien pensé passer dans le main() a l'appel de la fonction saisie() l'adresse de l'entier qui determine le nombre de mes elements du tableau_ &N _ et un pointeur sur tableau puis dans la fonction saisie terminer par return X[i], i l'incrementation du tableau ~valeur de N max~. Mais ca n'a rien donné de plus quant au deuxieme argument(l'entier qui reste scotché dans la fonction) et le tableau ?
Ou alors existe-il un pointeur sur fonction qui puisse me retourner ces 2 entites dans le main ?


---------------
nationale85
Reply

Marsh Posté le 13-12-2004 à 19:18:56    

je comprends rien.

Reply

Marsh Posté le 13-12-2004 à 21:05:24    


Voici avec le code ce que j'ai fait :
 
#include <stdio.h>
int saisie(int,int *);
void affichage(int,int *);
int POINTS[50];         /* tableau des points */
 
void main()
{
 int N=0;          /* nombre d'etudiants*/            
 int *P=POINTS;
 
 saisie(N,P);
 affichage(N,P);
 
 printf("\n" );
 
}
 
/* ******* Saisie ******** */
int saisie(int N,int *X)
{
 int I;  
 int N=0;    /* nombre d_etudiants */
 printf("Entrez le nombre d_Etudiants(max.50) :\n" );
 scanf("%d",&N);
 printf("Entrez les points des Etudiants :\n" );
 for(I=0;I<N;I++)
 {
  printf("Etudiant %d :",I+1);
  scanf("%d",&X[I]);
 }
 return X[I];
}
Et la ca bloque car il me faudrait retourner le tableau et aussi le nombre d_etudiants dans le main() !!!


---------------
nationale85
Reply

Marsh Posté le 13-12-2004 à 21:13:47    

Ben ton return X[I] est totalement inutile. Un return N par contre...
surtout si tu fais un appel avec N = saisie(P);  
je met pas N = saisie(N,P); car il est clair que N est totalement inutile comme parametre de saisie.
A+,  
 


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

Marsh Posté le 13-12-2004 à 21:33:35    


Manque les balises pour le code ...

Citation :


Code :
  1. #include <stdio.h>
  2. int saisie(int,int *);
  3. void affichage(int,int *);
  4. int POINTS[50];         /* tableau des points */
  5. void main()
  6. {
  7. int N=0;          /* nombre d'etudiants*/         
  8. int *P=POINTS;
  9. saisie(N,P);
  10. affichage(N,P);
  11. printf("\n" );
  12. }
  13. /* ******* Saisie ******** */
  14. int saisie(int N,int *X)
  15. {
  16. int I;
  17. int N=0;    /* nombre d_etudiants */
  18. printf("Entrez le nombre d_Etudiants(max.50) :\n" );
  19. scanf("%d",&N);
  20. printf("Entrez les points des Etudiants :\n" );
  21. for(I=0;I<N;I++)
  22. {
  23.  printf("Etudiant %d :",I+1);
  24.  scanf("%d",&X[I]);
  25. }
  26. return X[I];
  27. }


Et la ca bloque car il me faudrait retourner le tableau et aussi le nombre d_etudiants dans le main() !!!


  • La globale est inutile. La définir dans le main().
  • main() retourne int. Toujours.

http://mapage.noos.fr/emdel/notes.htm#typemain
 

  • scanf() n'est pas une fonction de débutant (ni même de chevronnés).

http://mapage.noos.fr/emdel/notes.htm#saisie
 

  • Il manque la fonction d'affichage.

Vu de la fonction saisie() le tableau est accessible en écriture et celle-ci ne se prive pas de le modifier. Il n'y a donc rien à retourner de plus...
 
La fonction pourrait retourner le nombre d'étudiants. La paramètre N devient alors inutile.


Message édité par Emmanuel Delahaye le 13-12-2004 à 21:41:20

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 13-12-2004 à 21:43:25    

Merci Gilou, ca marche au poil. C'est vrai que je ne suis jamais tres loin de la solution, mais a la compil, ce presque entraine fatalement un echec ! merci encore...


---------------
nationale85
Reply

Marsh Posté le 14-12-2004 à 19:39:28    

Bonsoir,
J'ai juste omis de vous mettre ma solution, qui grâce à vous m'a permis de progresser d'un pas.
 
#include <stdio.h>
int saisie(int *);
 
void main()
{
 int N=0;                  /* nombre d'etudiants */
 int I;
 int POINTS[50];         /* tableau des points */
 int *P=POINTS;
 
 N=saisie(P);
 
 for(I=0;I<N;I++)
  printf("etudiant %d : points %d \n",I+1,P[I]);
 printf("\n" );
}
/* ******* Saisie ******** */
 
int saisie(int *X)
{
 int I;  
 int E=0;
 printf("Entrez le nombre d'Etudiants(max.50) :\n" );
 scanf("%d",&E);
 printf("Entrez les points des Etudiants :\n" );
 for(I=0;I<E;I++)
 {
  printf("Etudiant %d :",I+1);
  scanf("%d",&X[I]);
 }
 return E;
}
 
Merci encore à ce forum.


---------------
nationale85
Reply

Sujets relatifs:

Leave a Replay

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