Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1614 connectés 

  FORUM HardWare.fr
  Programmation
  C

  fonctions C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

fonctions C

n°1218248
JusteMoiDe​Retour
Posté le 08-10-2005 à 12:08:52  profilanswer
 

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 !

mood
Publicité
Posté le 08-10-2005 à 12:08:52  profilanswer
 

n°1218253
Taz
bisounours-codeur
Posté le 08-10-2005 à 12:32:26  profilanswer
 

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

n°1218268
Emmanuel D​elahaye
C is a sharp tool
Posté le 08-10-2005 à 13:23:17  profilanswer
 

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/
n°1218451
JusteMoiDe​Retour
Posté le 08-10-2005 à 19:44:38  profilanswer
 

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 :-)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  fonctions C

 

Sujets relatifs
Quelles fonctions en C permettent de securiser des perpheriques?Quelles fonctions en C permettent de securiser des perpheriques?
SQL Server 2000, fonctions, procedures stockes et execUPDATE sous MySQL + fonctions string ?
appel continu de fonctions...aidez moi à améliorer mes fonctions :o
[Débutant] Lancer des fonctions simultanémentComment charger deux fonctions dans la balise body ?
[C++] Problème avec les pointeurs de fonctionsFonctions d'image en PHP truecolor-> grayscale
Plus de sujets relatifs à : fonctions C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR