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 fonction strtof


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Par défaut problème fonction strtof
    Bonjour,

    Je cherche à lire un fichier contenant des entiers et des flotants séparés par une virgule. N'arrivant pas à gérer la virgule, j'utilise getline et je convertis en int ou float.

    Mais lors de la compilation la fonction strtof est mal interprété. Voici mon 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #include <cstdlib>
    #include <fstream.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <limits.h>
    #include <vector>
    #include <string>
     
    #include "fonc_mod.h"
     
     
    using namespace std;
    using std::cout;
     
    void lecture(ifstream & donnee, int indice[], float p[], float w[], int nb_article){
     
     
    		char ligne;
    		donnee >> ligne;
            donnee >> ligne;
     
    		int i;
            char tampon[10];
    		for (i=0;i<nb_article;i++){
     
    			donnee.getline(tampon, 10, ', ');
                indice[i] = strtol(tampon, (char **)NULL, 10);
                donnee.getline(tampon, 10, ', ');
                w[i] = strtof(tampon, 0);
                donnee.getline(tampon, 10);
                p[i] = strtof(tampon, 0);
    		};
            donnee >> ligne;
    };
    Et voici le message d'erreur à la compilation

    30 fonc_mod.cpp implicit declaration of function `int strtof(...)'
    Meric d'avance

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Euh...
    Ça, c'est typiquement un message d'erreur en langage C... Généralement, en C++, on a un truc du type "undeclared"...

    Quoi qu'il en soit, ça veut dire que la fonction strtof() n'est pas déclarée. Il me semble qu'elle n'est pas standard.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    Citation Envoyé par Médinoc
    Euh...
    Ça, c'est typiquement un message d'erreur en langage C... Généralement, en C++, on a un truc du type "undeclared"...
    oui parce qu'en C++ on utiliserais des std::string et des string streams (voir FAQ)

  4. #4
    Invité
    Invité(e)
    Par défaut
    ... et les includes seraients différents (pas de .h !). Non, nous avons bien ici à faire à un mix hideux de deux langages, compilés avec l'un des deux compilateurs (et pas forcément celui du C++).

    Pas de miracle. Ca ne marche pas.

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    As-tu essayé d'utiliser atof en lieu et place de strtof ?

  6. #6
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Par défaut
    Merci pour le coup de main. Je vais essayer avec des string streams. Malheureusement la FAQ de developpez.com à des petits problèmes. Non ?

  7. #7
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Par défaut
    As-tu essayé d'utiliser atof en lieu et place de strtof ?
    JE viens d'essayer ca compile et cela execute mais toutes les valeurs sont des 0...

    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
    17
    18
    19
    20
    21
    22
    23
     
    void lecture(ifstream & donnee, int indice[], float p[], float w[], int nb_article){
     
     
    		char ligne;
    		donnee >> ligne;
            donnee >> ligne;
           donnee >> ligne;
    donnee >> ligne;
    		int i;
            char tampon[10];
    		for (i=0;i<nb_article;i++){
     
    			donnee.getline(tampon, 10, ', ');
                indice[i] = atol(tampon);
                donnee.getline(tampon, 10, ', ');
                w[i] = atof(tampon);
                donnee.getline(tampon, 10);
                p[i] = atof(tampon);
                cout << indice[i] << "\t" << w[i] <<   "\t" << p[i] << endl;
    		};
            donnee >> ligne;
    };
    et le fichier source :


    Instance 1 w_i in [W/10, W/2]
    n = 100
    W = V = 10000
    w_i, , v_i, p_i, b_i =
    4044, 4391, 4698, 1
    4973, 3643, 4782.5, 1
    4381, 1162, 3029, 1
    2895, 2774, 3096.5, 1
    2481, 2436, 2587.5, 1
    4483, 1047, 3217, 1
    4102, 3983, 4098, 1
    3905, 2029, 3435, 1
    1368, 3659, 2846.5, 1
    3010, 3856, 3787.5, 1
    2622, 3988, 3371, 1
    3610, 1048, 2662.5, 1
    2631, 4429, 3697, 1
    4874, 2323, 3898.5, 1
    2513, 4894, 4046, 1
    2421, 4376, 3621, 1
    4462, 4567, 4747, 1
    2437, 3471, 3256.5, 1
    3539, 4928, 4468.5, 1
    2516, 2937, 2791.5, 1
    2189, 1648, 2261, 1
    2341, 1346, 2186.5, 1
    2225, 2977, 2883.5, 1
    2270, 3939, 3473,


    enfin un bout

    et je ne stocke que des 0 !

  8. #8
    Membre expérimenté
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Par défaut
    Pourquoi tu ne fais pas un simple >> vers un double suivi d'un ignore sur ',' ?
    genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    double v1, v2, v3;
    cin >> v1; cin.ignore( 512, ',' );
    cin >> v2; cin.ignore( 512, ',' );
    cin >> v3;

    (sinon les float ça craint, ça m'étonnerait que tu ais besoin d'eux à la place des doubles)

  9. #9
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Par défaut
    Un Grand merci !

    Si je me galère depuis si longtemps c'est que j'essaye de lire un fichier dans un format doc...

    Donc une extension .txt est bien plus adaptée au fichier de données (pas d'entête !)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème : Fonctions et commande Execute
    Par bubi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/11/2005, 11h01
  2. Problème fonction SDL
    Par seeme dans le forum SDL
    Réponses: 2
    Dernier message: 06/11/2005, 20h22
  3. Problème fonction PL/SQL
    Par SSJ17Vegeta dans le forum PL/SQL
    Réponses: 2
    Dernier message: 29/10/2005, 21h14
  4. Problème fonction et trigger sous 7.2
    Par anoukhan dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 22/06/2005, 22h53
  5. Réponses: 2
    Dernier message: 20/08/2004, 17h10

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