IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème float, fonction


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 4
    Par défaut Problème float, fonction
    Je développe pour mon projet une petite application et je rencontre un problème. Tout d'abord voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    //fichier main.c
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {  float taux; 
     
        printf("Bienvenue dans notre logiciel de calcul HF\n\n");
        taux=taux_ondulation();
        printf("%f", taux); //test de retour de la valeur taux_o
     
     
      system("PAUSE");	
      return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    //fichier taux_ondulation.c
     
    #include <stdio.h>
    #include <stdlib.h>
     
    float taux_ondulation()
    {   float taux_o = 0.0; 
        printf("Veuillez saisir le taux d'ondulation max (Am) en dB : ");
        scanf("%f", &taux_o);
        while ( taux_o < 0 || taux_o > 10 )
              { printf("Valeur incorrecte ! Recommencez : ");
                getchar();
                scanf("%f", &taux_o);
              }
        printf("Vous avez choisi un taux de %.2f dB\n\n", taux_o);
        return taux_o;
    }
    Mon problème est le suivant lors de l'éxecution sur une console de ce code, la fonction est bien appelée et bien exécuté, on peut observer : "Vous avez choisi un taux de (nombre) dB " et le nombre correspond bien à celui tapé pendant le test. Cependant j'ai rajouté un printf sur la valeur taux dans le main, pour vérifier que j'ai bien la même valeur de taux_o dans le main ! Mais ça m'affiche n'importe quoi, du style 1495698394.00000 à chaque coup.
    Je vois pas où est le problème, si c'est au niveau de l'utilisation des float ou au niveau du return.

    Avec des integer il n'y a aucun problèmes !
    Mais je dois,pour cette application absolument renvoyer une valeur réelle non entière.

    Merci de votre aide !!

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Où est définie la fonction taux_ondulation ?

    Ajoute la déclaration comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /* déclaration de la fonction */
    float taux_ondulation(void);
     
    int main(void)
        ..
        return 0;
    }
    PS : tu peux aussi passer par un fichier .h
    PPS : ton compilateur ne donne pas d'avertissement

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 4
    Par défaut
    Merci ! ça fonctionne déjà beaucoup mieux

    Je comprends pas trop le fond de la chose :o pourquoi ça fonctionnait sans soucis avec un type integer ( peut-etre que la fonction se déclare automatiquement en int, si on ne l'écrit pas dans main et ça doit poser des problèmes sur des float :o ) enfin je sais pas.

    Merci quand même ça me débloque.

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par Brian4 Voir le message
    Je comprends pas trop le fond de la chose :o pourquoi ça fonctionnait sans soucis avec un type integer ( peut-etre que la fonction se déclare automatiquement en int, si on ne l'écrit pas dans main et ça doit poser des problèmes sur des float :o ) enfin je sais pas.
    Comme tu ne l'avais pas déclaré, le compilateur a considéré que taux_ondulation renvoyait un entier.

    Le nombre 1 en flottant s'écrit 0x3F 80 00 00 en hexa. (cf http://en.wikipedia.org/wiki/Single_...g-point_format)

    dans le main, on récupère cette valeur hexa pensant que c'est un entier (alors que l'hexa qui correspond à l'entier 1 est 0x00 00 00 01)

  5. #5
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonsoir.
    Sinon en générale on écris tout les prototypes dans des fichiers.h que l'on inclus dans les fichiers.c dont les fonctions sont dépendances (là où il faut déclarer le prototype de la fonction avant son appel dans une autre fonction).

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdio.h>
    #include "fonc.h"
     
    int main(void) /* syntaxe correcte */
    {  float taux; 
     
        printf("Bienvenue dans notre logiciel de calcul HF\n\n");
        taux=taux_ondulation();
        printf("%f", taux); //test de retour de la valeur taux_o
     
     
      getchar (); /* portable */   
      return 0;
    }
    fonc.h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    float taux_ondulation(void);
    /* tu verra l'utilité de ces fichiers lorsque tu auras beaucoup de prototypes */
    Et fonc.c :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include <stdio.h>
    /* #include <stdlib.h> inutile */
     
    float taux_ondulation(void) /* void quand la fonction ne prend pas de paramètres */
    {   float taux_o = 0.0; 
        printf("Veuillez saisir le taux d'ondulation max (Am) en dB : ");
        scanf("%f", &taux_o);
        while ( taux_o < 0 || taux_o > 10 )
              { printf("Valeur incorrecte ! Recommencez : ");
                getchar();
                scanf("%f", &taux_o);
              }
        printf("Vous avez choisi un taux de %.2f dB\n\n", taux_o);
        return taux_o;
    }

  6. #6
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 73
    Par défaut
    au lieu de mettre un while pour tester la valeur de taux mets un
    do
    {
    instruction;
    }while(conditions);
    sinn tu pourra avoir des problemes si l'adresse de la variable contenait une valeur entre 0 et 10 avant

Discussions similaires

  1. C++ Problème de fonctions et pointeurs
    Par zmatz dans le forum C++
    Réponses: 3
    Dernier message: 01/10/2005, 16h20
  2. [MFC][WINSOCK] Problème avec fonction recv
    Par Le Farfadet dans le forum MFC
    Réponses: 4
    Dernier message: 23/09/2005, 11h00
  3. Problème de fonction
    Par Anduriel dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/05/2005, 20h30
  4. Problème avec fonction d'envoie de mail
    Par zyg dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 23/02/2005, 08h48
  5. [Requête] Problème avec fonction "DATE_FORMAT()"
    Par sekiryou dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2005, 21h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo