fonctions C

fonctions C - C - Programmation

Marsh Posté le 08-10-2005 à 12:08:52    

Bonjour !
Quelqu'un pourrait t il m'aider?
Je debute en C et je ne sais pas comment declarer et definir une fonction en parametre d'une autre fonction.  
Voici le code :  

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main () {
  4. double appliquer (double, (*f));
  5. double division (double);
  6. char ligne[50];
  7. char ** pptr;
  8. double nb = 0;
  9. do
  10. {
  11.  printf("Entre un double : " );
  12.  if (gets(ligne) == NULL)
  13.   return -1;
  14.  nb = strtod(ligne, pptr);
  15.  if (**pptr = '\\0' && strlen(ligne) != 0)
  16.  { printf("\\n" );
  17.   break;
  18.  }
  19.  printf("Erreur, recommencez\\n" );
  20. }
  21. while (1);
  22. printf("La division par deux de %f = appliquer(nb, division)", nb);
  23. }//Fin du main()
  24. double appliquer (double nb, double (*f)(double)) {
  25. return (*f)(nb);
  26. }
  27. double division (double nb) {
  28. return double/2.0;
  29. }


A la compilation il y a assez bien d'erreur :  
 
fonctionsTest.c: In function `main':
fonctionsTest.c:6: error: syntax error before '*' token
fonctionsTest.c: In function `division':
fonctionsTest.c:36: error: syntax error before "double"
fonctionsTest.c:37:2: warning: no newline at end of file
 
Merci d'avance !

Reply

Marsh Posté le 08-10-2005 à 12:08:52   

Reply

Marsh Posté le 08-10-2005 à 12:32:26    

n'utilise jamais gets
 
 
sinon ben mets le prototype de appliquer avant ton main, tell quel. Et puis ne mets pas les prototypes dans main, mets les au dessus

Reply

Marsh Posté le 08-10-2005 à 13:23:17    

JusteMoiDeRetour a écrit :

Bonjour !
Quelqu'un pourrait t il m'aider?
Je debute en C et je ne sais pas comment declarer et definir une fonction en parametre d'une autre fonction.  
Voici le code : <...> A la compilation il y a assez bien d'erreur :  


fonctionsTest.c: In function `main':
fonctionsTest.c:6: error: syntax error before '*' token
fonctionsTest.c: In function `division':
fonctionsTest.c:36: error: syntax error before "double"
fonctionsTest.c:37:2: warning: no newline at end of file




Tu veux faire des choses trop compliquées... Déjà, la gestion du pointeur de fin de strtod() est erronée. Commence déjà par faire fonctionner du code simple :  


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
static double division (double nb)
{
    return nb/2.0;
}
 
static double appliquer (double nb, double (*f)(double))
{
    return (*f)(nb);
}
 
int main (void)
{
    char ligne[50];
     
    printf("Entre un double : " );
     
    gets(ligne);
     
    if (strlen(ligne) != 0            )
    {
        double nb = strtod(ligne, NULL);
         
        printf("La division par deux de %f = appliquer(nb, division) = %f", nb, appliquer(nb, division));
    }
    return 0;
}


Ensuite, tu ajouteras le code de test d'erreur si tu veux.
 
Et puis Taz à raison, il ne faut pas utiliser gets().
 
http://mapage.noos.fr/emdel/notes.htm#saisie
http://mapage.noos.fr/emdel/notes.htm#fichiers


Message édité par Emmanuel Delahaye le 08-10-2005 à 13:23:52

---------------
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 08-10-2005 à 19:44:38    

Ah oui ! j'ai compris mnt ! MERCI BCP :-D
Oui pour le pointeur je me suis trompe... c'etait &pptr et if(*pptr == '\0') ...
 

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. double appliquer (double nb, double (*f)(double)) {
  4. return (*f)(nb);
  5. }
  6. double division (double nb) {
  7. return nb/2.0;
  8. }
  9. int main () {
  10. char ligne[50];
  11. char * pptr;
  12. double nb = 0, res;
  13. do
  14. {
  15.  printf("Entre un double : " );
  16.  if (gets(ligne) == NULL)
  17.   return -1;
  18.  nb = strtod(ligne, &pptr);
  19.  if (*pptr == '\\0' && strlen(ligne) != 0)
  20.  { printf("\\n" );
  21.   break;
  22.  }
  23.  printf("Erreur, recommencez\n" );
  24. }
  25. while (1);
  26. res = appliquer(nb, division);
  27. printf("La division par deux de %f = %f", nb, res);
  28. }


 
mais ca ne fonctionne pas comme je le pensais :-)

Reply

Sujets relatifs:

Leave a Replay

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