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++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�
    Avatar de warubi
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    399
    D�tails du profil
    Informations personnelles :
    �ge : 33
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 399
    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 confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    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 296
    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";
     
    }
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  3. #3
    Membre �clair�
    Avatar de warubi
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    399
    D�tails du profil
    Informations personnelles :
    �ge : 33
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 399
    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