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 :

amelioration de code


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut amelioration de code
    bonjour 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
    #include <iostream.h>
    #include <stdio.h>
    #include <fstream>
    using namespace std;
    int main ()
    {
      FILE * pFile;
      pFile = fopen ("new.c","w");
      ifstream fichier( "log_normal_sigma0.2" );
      string  ligne;
    {while ( getline( fichier, ligne ) ){
    if (ligne[0]==1){{fprintf (pFile,"%c\n",ligne[0]);}
    }}}}
    merci de m'aider.
    ps: si on enleve la condition if, ca marche, mais ca ecrit toutes les valeurs.


    Ce programme est censé ecrire dans le fichier new la premiere valeur de chaque ligne du fichier log_normal_sigma0.2, uniquement si la valeur est égale à 1.
    Je ne vois pas pq ca ne fonctionne pas.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Tu veux comparer au caractère '1', pas à celui ayant 1 comme code ASCII (enfin je suppose). Essaye ça :

    De plus ce mélange C/C++ est plutôt bizarre, surtout sur une même fonctionnalité.

    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
    #include <fstream>
    #include <iostream>
    #include <string>
     
    using namespace std;
     
    int main ()
    {
        ofstream fichier_out("new.c");
        ifstream fichier_in("log_normal_sigma0.2");
     
        string ligne;
        while (getline(fichier_in, ligne))
        {
            if (ligne[0] == '1')
               fichier_out << ligne[0] << endl;
        }
     
        return EXIT_SUCCESS;
    }
    PS : tu aurais effectué une exécution pas à pas, ou simplement écrit les valeurs de ligne dans un fichier, tu aurais tout de suite compris pourquoi ça ne marchait pas

  3. #3
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    merci pour toutes ces réponses.

    1)j'ai du mal a faire la différence entre C++,C. Si tu l'as ecrit en C, merci de le convertir en C++.

    2)PS : tu aurais effectué une exécution pas à pas, ou simplement écrit les valeurs de ligne dans un fichier, tu aurais tout de suite compris pourquoi ça ne marchait pas

    J'utilise code::blocks. Je ne sais pas faire de marche pas à pas. Alors merci de me l'indiquer, si tu le sais.

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    1)j'ai du mal a faire la différence entre C++,C. Si tu l'as ecrit en C, merci de le convertir en C++.
    Regarde l'intitulé du forum
    FILE*, fopen, fprintf ... C
    ifstream, ofstream, >>, <<, ... C++

    J'utilise code::blocks. Je ne sais pas faire de marche pas à pas. Alors merci de me l'indiquer, si tu le sais.
    Je n'utilise pas Code::Blocks, mais ça doit se trouver dans le menu de debogage.
    C'est aussi pour ça que je t'ai indiqué une autre solution : afficher la valeur de ligne[0] pour voir que ce n'était pas 1.

  5. #5
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    re-merci et re-bonjour

    voici une nouvelle version du 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
    #include <fstream>
    #include <iostream>
    #include <string>
     
    using namespace std;
     
    int main ()
    {
        ifstream file_in("new.c");
        ifstream fichier_in("log_normal_sigma0.2");
        ofstream fichier_out("new.c");
        string ligne,ligne2;
        while (getline(fichier_in, ligne))
        {
          while(getline(file_in,ligne2))
            if (ligne[0] != ligne2[0])
               fichier_out << ligne[0] << endl;
        }
     
        return EXIT_SUCCESS;
    }

    alors, par rapport au premier, celui -ci ne recopie la valeur du fichier log_normal_sigma0.2 dans le fichier new uniquement si celle-ci n'a pas deja ét é ecrite dans le fichier new. Bien sur, ca ne fonctionne pas.
    Est-ce un problème d'initialisation ?

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Le problème est que tu manipules ton fichier new.c avec deux flux différents, un en lecture et un en écriture. Tu devrais faire ton traitement en 2 passes.

    Et pense à utiliser les balises CODE.

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

Discussions similaires

  1. amelioration de code par un alias
    Par bosk1000 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/08/2009, 09h09
  2. amelioration de code pour eviter select
    Par bosk1000 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/07/2009, 20h26
  3. comment ameliorer ce code?
    Par chrisl0 dans le forum Langage
    Réponses: 1
    Dernier message: 26/02/2009, 02h29
  4. [VBA-E] Amelioration dun code
    Par Elstak dans le forum Macros et VBA Excel
    Réponses: 28
    Dernier message: 06/06/2007, 13h51
  5. amelioration de code
    Par deubelte dans le forum C++
    Réponses: 17
    Dernier message: 21/01/2007, 21h19

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