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 :

probleme dans le code source


Sujet :

C++

  1. #1
    Membre actif
    Avatar de warubi
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 399
    Points : 204
    Points
    204
    Par défaut probleme dans le code source
    Bonjour ! Je suis debutant en c++ et j'aimerais creer pour mon prof de musique
    (j'ai 14 ans) un logiciel qui extrait une ligne d'un fichier (un eleve) suite a la creation d'un fichier portant le nom de la classe et contenant le nom des eleves, dans une autre partie du programme.Le ligne extraite doit etre entre 1 et le nombre d'eleves de la classe en utilisant rand() pour generer un nombre aleatoire .Cependant, les nombres aleatoires generes ne sont pas dans la bonne plage et le nom de l'eleve ne s'affiche pas.Pouvez-vous m'aider S.V.P.?
    Jer sais, je ne sais pas programmer !
    Voici le bout de mon programme en question :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
        char extension[5 + 1] = ".txt";
        char debutchemin[20 + 1] = "C:\\SoundMusic\\";
        /*Creation du repertoire */
        char rep[] = "C:\\SoundMusic";
        if (CreateDirectory(rep, NULL))
       {
       }
       else
       {
       }
         char classe[10 + 1];
         cout <<"Avec quelle classe voulez vous travailler ?\n";
         cout <<" Exemple : 3e2\n";
         cin >> classe;
         strcat(debutchemin, classe);
         strcat(debutchemin, extension);
    /* Le programme verifie si le fichier existe donc si la classe existe */       
             if ( is_readable( debutchemin ) ) 
            { 
            cout <<"Le classe existe, le travail peut commencer !\n"; 
            ifstream fichiers( debutchemin ); 
    /*Le programme compte le nombre de ligne du fichier donc le nombre d'eleves presents dans la class */           
               if ( fichiers )
               {
               int lines = std::count(
               std::istreambuf_iterator<char>( fichiers ),
               std::istreambuf_iterator<char>(),'\n' );
               cout <<"Nombre d'eleves dans la "<< classe << " : "  << lines << endl;
               system("PAUSE");
     /*Voici la partie du programme qui me pose probleme */             
                  int d;
                  for (d = 1; d <= lines; d++)
                  {  
                  int r = rand();
                     if ( r <= lines)
                     {
                     ifstream fich( debutchemin );
                     string ligne;
    /*Extrait la  ligne  r du fichier  de la classe */                   
                        for(int i = 0; i < r; i++)
                        {
                        getline(fich, ligne);
                        cout << ligne << endl;
                        fich.close();
                        }
                     }
                  }
               }
            }

  2. #2
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    OK. Reprennons tranquillement.

    Des conseils:
    - ne ferme pas ton fichier dans ta boucle si tu continues à la lire.
    - en particulier, sors les interactions avec l'utilisateur des fonctions qui s'occupent de faire le boulot.
    - fais des fonctions pour découper ton code.
    - oublie les char[] et autre char*. Ils sont ton pire ennemi à ton niveau.
    - Des variables au pluriel alors qu'elles ne désignent qu'une seule seule et non un ensemble de choses.


    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    // boost -> http://www.boost.org
    // voir la FAQ et autres tutos pour son installation
    // je l'utilise par pure fainéantise: pour faciliter la gestion des noms de fichiers.
    // ça permet aussi de rendre le code portable,
    #include <boost/filesystem/path.hpp>
    #include <boost/filesystem/operations.hpp>
    #include <boost/filesystem/fstream.hpp>
    ...
     
    {
        const std::string extension = ".txt";
        const boost::filesystem::path chemin = "C:/SoundMusic";
     
        // @pre chemin doit exister
        if (! boost::filesystem::is_directory(chemin)) {
            if (!boost::filesystem::create_directory(chemin)) {
                throw ...
            }
        }
     
        // @todo recevoir un paramètre qui est le nom de la classe
        std::string classe;
        std::cout <<"Avec quelle classe voulez vous travailler ?\n";
        std::cout <<" Exemple : 3e2\n";
        std::cin >> classe;
     
        const boost::filesystem::f_classe = chemin / (classe+extension);
     
        // @pre chemin / (classe+ext) doit être lisible
        boost::filesystem::ifstream fichier(f_classe);
        if (!fichier) {
            throw ...
        }
     
        // On lit tout à cause de ton rand()
        // On aurait pu à la place utiliser une fonction qui aurait ignoré les n
        // premières lignes.
        // Pas très grave de tout charger en mémoire vu qu'une classe, ce
        // n'est jamais trop de personnes. Toujours plus simple que de
        // devoir retourner au début du fichier. Ou alors, pour chaque
        // ligne, il aurait garder une index poursavoir où elle commençait
        // tandis qu'on les comptait.
        std::vector<std::string> lignes;
        std::string ligne;
        while (fichier >> ligne) {
            lignes.push_back(ligne);
        }
     
        const int r = std::rand() % UN_MAX;
        std::cout << "l'élève n°" << r << " est\n->"
            << lignes[r] << "\n";
     
    }

  3. #3
    Membre actif
    Avatar de warubi
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 399
    Points : 204
    Points
    204
    Par défaut
    Merci pour ce code.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 15/07/2006, 18h59
  2. [VBA-E]Probleme dans mon code ??? merci de votre aide
    Par gregantibes dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/04/2006, 18h24
  3. probleme dans le code
    Par vivu dans le forum C++
    Réponses: 41
    Dernier message: 14/11/2005, 18h13
  4. Affichage de caractère spéciaux absent dans le code source
    Par HNT dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 03/11/2005, 22h38
  5. petit probleme dans un code : theoreme de pythagore
    Par ETI-trian dans le forum C++
    Réponses: 3
    Dernier message: 15/10/2005, 13h13

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