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 :

gérer le changement de type d'une variable pour l'écrire dans un fichier


Sujet :

C++

  1. #1
    Membre averti Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Points : 383
    Points
    383
    Par défaut gérer le changement de type d'une variable pour l'écrire dans un fichier
    Bonjour à tous,

    J'ai une fonction qui récupère 3 variables a,b et c qui sont respectivement un const string, const int, et un const double.

    Ces variables prennent une valeur que si des conditions sont respectées et je dois récupérer cette valeur chaque fois que je rentre dans une des conditions pour écraser une variable que je définis en début de code mais sur laquelle je ne sais pas quel type je dois mettre (int, double, string ... ?)

    Avec le code ça sera plus parlant :

    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
     
    void myfunction(const std::string & a, const int & b, const double & c)
    {
     
    string maVar;
    maVar = a ;
     
    if(z)
    {
    maVar = b;
    }
     
    (....)
     
     
    if(x)
    {
    maVar = c;
    }
     
     
    (.....)
    // J'écris maVar dans mon fichier
    myfile << maVar;
    myfile.close();
     
    }
    Mon soucis c'est que lorsque maVar vaut b et que b=0 j'obtient dans le debuger pour maVar '\u0000', du coup quand je veux écrire cette valeur dans un fichier plus loin, je n'ai rien qui est écrit ou alors un caractère non ASCII (un petit rectangle)

    Je tiens à préciser que la valeur de maVar est censé être un double un final, je ne sais pas pourquoi ceux qui ont écrit ce code ont définit ces variables comme étant des string, des int et des double ...

    PS : Pour complexifier un peu la chose, je suis sous C++98 donc pas mal de truc que j'ai trouvé sur le net ne fonctionnait pas.

    Merci d'avance pour votre aide.

  2. #2
    Membre éprouvé
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 562
    Points : 1 253
    Points
    1 253
    Par défaut
    C++98 ???

    Salut,

    Instinctivement je propose un std::ostringstream. Quelque-chose comme ça :
    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
    #include <sstream> //std::ostringstream
     
    void f(const std::string& s, const int i, const double d)
    {
        std::ostringstream oss(s);
     
        if (x) {
            oss.str(""); //reset
            oss<< i; //set
        }
     
        if (y) {
            oss.str("");
            oss<< d;
        }
     
        file<< oss.str(); //get
    }

  3. #3
    Membre averti Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Points : 383
    Points
    383
    Par défaut
    Salut,

    Merci pour ta réponse, c'est exactement ce que j'ai fais.

    Oui c'est un projet qui a été codé y a de ça quelques années déjà et pas possible d'utiliser un compilateur plus récent .... dommage

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,
    Citation Envoyé par nekcorp Voir le message
    Salut,

    (...)
    Oui c'est un projet qui a été codé y a de ça quelques années déjà et pas possible d'utiliser un compilateur plus récent .... dommage
    Pourquoi ne serait-il pas possible de passer sur un compilateur plus récent

    Il se peut que le code d'origine ait été compilé avec un compilateur qui s'en foutait plus ou moins de la norme (tel que MSVC-6) et qu'il ait utilisé abondamment des extensions proposées par ce compilateur (ou une bibliothèque qui n'est disponible que pour ce compilateur), ce qui peut effectivement rendre le portage ... beaucoup plus compliqué.

    Il se peut aussi que tu n'aies simplement pas les droits suffisants pour installer quoi que ce soit sur cet ordinateur. Auquel cas, il devrait être "assez simple" de trouver quelqu'un qui dispose de ces droits

    Mais, dans l'ensemble, il faut te dire que même les toutes dernières versions des compilateurs actuels sont parfaitement capables de fonctionner avec les normes les plus anciennes. Sous Gcc (et clang), il suffit par exemple d'ajouter le flag --std=c++98 pour compiler en respectant la norme telle qu'elle était en ... 1998.

    Dés lors, si tu arrives à contourner le problème lié au droit d'installer quelque chose sur l'ordinateur, tu peux parfaitement utiliser un compilateur tout ce qu'il y a de plus récent

    Et même si il peut être "assez compliqué" de modifier le code pour qu'il puisse respecter les "dernières normes" (C++11, C++14, C++17 ou C++20), rien ne t'empêche donc d'utiliser gcc-10.2.1 (c'est la version qui est installée sur ma debian) avec le flag adéquat pour qu'il compile en respectant les normes connues à l'époque de ses versions les plus anciennes
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/04/2015, 11h28
  2. Réponses: 3
    Dernier message: 19/03/2014, 14h33
  3. Réponses: 2
    Dernier message: 23/11/2011, 11h22
  4. Récupérer une variable pour l'afficher dans un Edit Text
    Par maiza_med dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 30/04/2008, 10h14
  5. [SGBD] Parser une variable pour mettre données dans bdd MySQL
    Par winnie82 dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 15/03/2006, 17h20

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