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 :

petite BDD qui ne marche pas


Sujet :

C++

  1. #1
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut petite BDD qui ne marche pas
    j'avais mis ce sujet en résolu mais finalement non, voir mon dernier post, après avoir corrigé des erreurs sur le code j'ai reposté mon nouveau code mais qui ne marche toujours pas
    bonjour, ca fait plusieurs jours que je me triture les méningues sans y arriver
    dans mon petit programme qui part d'un petit tuto que j'ai complété je n'arrive pas à rentrer dans ma structure mes variables lues dans un fichier texte
    le fichier texte est en séparateur ";"
    je crée des fiches (ca marche)
    j'enregistre dans le fichier texte (ca marche)
    je veux lire le fichier texte pour ensuite rajouter de nouvelles fiches et là quand je vais lire ce qu'il y a dans ma structure c'est n'importe quoi !

    en fait quand je lis avec getline et que j'attribue à nom, ou prenom ou numero ca foire
    ce programme ne sert à rien, c'est juste pour apprendre à faire, mais je coince,
    merci de votre aide
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
     
    #include <iostream>
    #include<fstream>// pour ofstream et ifstream entre autres
    #include<sstream>// pour isstringstream
     
    #include <stdlib.h>
    #include <string.h>
    /********************/
    using namespace std;
    /********************/
    //char chaineCaracteres[500+1]={'\0'}; sert à rien voir string
    string const lienFichier("F:\\prog\\carnetDadresses.txt");
    string chaineProvisoire;
    int numeroFiche = 0;
    struct Personne {
      char nom[32];
      char prenom[32];
      char numero[32];
    };
    void enregistrer(Personne *db, int taille) {
        ofstream monFlux(lienFichier.c_str());
      cout << endl << "Liste:" << endl;
      for (int i=0; i<taille; i++)
        monFlux << db[i].nom << "  " << db[i].prenom << "  " << db[i].numero << endl;
    //    cout << i+1 << ") " << db[i].nom << "  " << db[i].prenom << "  " << db[i].numero << endl;
      //cout << endl;
     
        cout<<"coucou enregistrement demande"<<endl;
    }
    void lire(Personne *existant){
        numeroFiche=0;
        string ligne, mot;
        int compteur =1, position=1;
        ifstream monFlux(lienFichier.c_str());
        while(getline(monFlux,ligne))
        {
            istringstream iss(ligne);
         cout <<ligne<<endl;
            while(getline(iss, mot,';'))
            {
                if (position==1){
                        existant->nom;
                }
                else if (position==2){
                        existant->prenom;
                }
                else if (position==3){
                        existant->numero;
                }
               position++;
               if (position==4){position =1;}
     
            }
            //existant++;
            numeroFiche++;
        }
     
     
        cout<<"lecture de fichier demandee"<<endl;
    }
    void nouveau_numero(Personne *nouveau) {
      cout << "Nouvelle entree dans la base de donnees:" << endl;
      cout << "Entrez le nom: ";
      cin >> nouveau->nom;
      cout << "Entrez le prenom: ";
      cin >> nouveau->prenom;
      cout << "Entrez le numero: ";
      cin >> nouveau->numero;
     
      if (nouveau->nom[0] >= 'a' && nouveau->nom[0] <= 'z') // minuscule
        nouveau->nom[0] += 'A' - 'a'; // majuscule
    }
     
    void recherche(Personne *db, int taille) {
      char search[32];
      cout << " Entrez le nom a chercher: ";
      cin >> search;
     
      int index = 0;
      while (index < taille && strcmp(db[index].nom, search) != 0)
        index++;
     
      if (index < taille)
        cout << "Le numero de " << search << " est " << db[index].numero << endl;
      else
        cout << "Le nom '" << search << "' n'existe pas dans la base de donnees." << endl;
    }
     
    void liste(Personne *db, int taille) {
      cout << endl << "Liste:" << endl;
      for (int i=0; i<taille; i++)
        cout << i+1 << ") " << db[i].nom << "  " << db[i].prenom << "  " << db[i].numero << endl;
      cout << endl;
    }
     
    int main(int argc, char **argv) {
      const int max_adresses = 20;
      Personne db[max_adresses];
      //int numeroFiche = 0;//tranférée en globale
      bool fin = false;
      char choix;
     
      do {//pour mémoire c'est un do while
        cout << "1) Nouveau numero" << endl;
        cout << "2) Recherche" << endl;
        cout << "3) Liste" << endl;
        cout << "4) lister le dossier" << endl;
        cout << "0) Quitter" << endl;
        cout << "*******************"<< endl;
        cout << "e) Enregistrer"<< endl;// on peut mettre 1 seul caractere (lettre ou chiffre ou signe
        cout << "l) Lire le fichier"<< endl;// on peut mettre 1 seul caractere (lettre ou chiffre ou signe
     
        cin >> choix;
     
        switch (choix) {
        case '1':
          if (numeroFiche < max_adresses) {
            nouveau_numero(db + numeroFiche);
            numeroFiche++;
          }
          else
            cout << "Base de donnees pleine\n";
          break;
        case '2':
          recherche(db, numeroFiche);
          break;
        case '3':
          liste(db, numeroFiche);
          break;
        case '4':
          //system("dir F:/prog/bddCpp/*.* > F:/prog/petiteBddTest/results1.txt");// INCORRECT (pour linux)
          system("dir F:\\prog\\bddCpp\\*.* > F:\\prog\\petiteBddTest\\results1.txt");
          break;
          case '0':
          fin = true;
          break;
        case'e':
            enregistrer(db, numeroFiche);
            break;
        case'l':
            lire(db + numeroFiche);
            break;
        }
      } while (!fin);
     
      return 0;
    }
    merci

  2. #2
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut
    bonjour,
    je croyais que ça marchait, mais finalement non ça ne marche pas
    la fonction lire() ne fonctionne pas
    j'ai un fichier texte qui contient par exemple
    titi;toto;50
    tata;zozo;10
    et je voudrais attribuer les champs de la façon suivante dans la structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct Personne {
      char nom[32];
      char prenom[32];
      char numero[32];
    };
    et bien ça ne marche pas
    j'ai lu et essayé depuis quelques jours pleins de sujets sur getline, j'ai parallèlement essayé avec sscanf sans succès
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    #include <iostream>
    #include<fstream>// pour ofstream et ifstream entre autres
    #include<sstream>// pour isstringstream
    #include <iomanip>      // std::setfill, std::setw
    #include <stdlib.h>
    #include <string.h>
    #include <cstdio>
    /********************/
    using namespace std;
    /********************/
    //char chaineCaracteres[500+1]={'\0'}; sert à rien voir string
    string const lienFichier("F:\\prog\\carnetDadresses.txt");
    string chaineProvisoire;
    int numeroFiche = 0;
    struct Personne {
      char nom[32];
      char prenom[32];
      char numero[32];
    };
    void enregistrer(Personne *db, int taille) {
        ofstream monFlux(lienFichier.c_str());
        for (int i=0; i<taille; i++)
        monFlux << db[i].nom << ";" << db[i].prenom << ";" << db[i].numero << endl;
        monFlux.close();
        cout<<"coucou enregistrement demande"<<endl;
     
    }
    void lire(Personne *existant){
        numeroFiche=0;
        string ligne, mot;
        int compteur =1, position=1;
        ifstream monFlux(lienFichier.c_str());
        while(getline(monFlux,ligne))
        {
            istringstream iss(ligne);
         cout <<ligne<<endl;
         while(getline(iss, mot,';'))
            //while(getline(monFlux, mot,';'))
            {
                if (position==1){
                        existant[numeroFiche].nom;
                        cout << "lecture nom = "<< existant[numeroFiche].nom << endl;
                }
                else if (position==2){
                        existant[numeroFiche].prenom;
                        cout << "lecture prenom = " << existant[numeroFiche].nom<<endl;
     
                }
                else if (position==3){
                        existant[numeroFiche].numero;
                }
               position++;
               if (position==4){position =1;}
     
            }
            //existant++;
            numeroFiche++;
        }
     
        monFlux.close();
        cout<<"lecture de fichier demandee"<<endl;
    }
    void nouveau_numero(Personne *nouveau) {
      cout << "Nouvelle entree dans la base de donnees:" << endl;
      cout << "Entrez le nom: ";
      cin >> nouveau->nom;
      cout << "Entrez le prenom: ";
      cin >> nouveau->prenom;
      cout << "Entrez le numero: ";
      cin >> nouveau->numero;
     
      if (nouveau->nom[0] >= 'a' && nouveau->nom[0] <= 'z') // minuscule
        nouveau->nom[0] += 'A' - 'a'; // majuscule
    }
     
    void recherche(Personne *db, int taille) {
      char search[32];
      cout << " Entrez le nom a chercher: ";
      cin >> search;
     
      int index = 0;
      while (index < taille && strcmp(db[index].nom, search) != 0)
        index++;
     
      if (index < taille)
        cout << "Le numero de " << search << " est " << db[index].numero << endl;
      else
        cout << "Le nom '" << search << "' n'existe pas dans la base de donnees." << endl;
    }
     
    void liste(Personne *db, int taille) {
      cout << "Liste:" << endl;
      for (int i=0; i<taille; i++)
       /* cout << setfill(' ')
         << setw(15) << left << "Colonne 1"
         << setw(10) << left << "Colonne 2"
         << endl; */
    cout << i+1 << ") " <<  setfill(' ') << left << setw(25) << db[i].nom << "  "  << setw(25) << db[i].prenom << "  "  << setw(15) << db[i].numero << endl;
      cout << endl;
    }
     
    int main(int argc, char **argv) {
      const int max_adresses = 20;
      Personne db[max_adresses];
      //int numeroFiche = 0;//tranférée en globale
      bool fin = false;
      char choix;
     
      do {//pour mémoire c'est un do while
        cout << "1) Nouveau numero" << endl;
        cout << "2) Recherche" << endl;
        cout << "3) Liste" << endl;
        cout << "4) lister le dossier" << endl;
        cout << "0) Quitter" << endl;
        cout << "*******************"<< endl;
        cout << "e) Enregistrer"<< endl;// on peut mettre 1 seul caractere (lettre ou chiffre ou signe
        cout << "l) Lire le fichier"<< endl;// on peut mettre 1 seul caractere (lettre ou chiffre ou signe
        cout << "s) supprimer toute les données du fichier et de la liste (RAZ)"<< endl;// on peut mettre 1 seul caractere (lettre ou chiffre ou signe
     
        cin >> choix;
     
        switch (choix) {
        case '1':
          if (numeroFiche < max_adresses) {
            nouveau_numero(db + numeroFiche);
            numeroFiche++;
          }
          else
            cout << "Base de donnees pleine\n";
          break;
        case '2':
          recherche(db, numeroFiche);
          break;
        case '3':
          liste(db, numeroFiche);
          break;
        case '4':
          //system("dir F:/prog/bddCpp/*.* > F:/prog/petiteBddTest/results1.txt");// INCORRECT (pour linux)
          system("dir F:\\prog\\bddCpp\\*.* > F:\\prog\\petiteBddTest\\results1.txt");
          break;
          case '0':
          fin = true;
          break;
        case'e':
            enregistrer(db, numeroFiche);
            break;
        case'l':
            lire(db);//, numeroFiche);
            break;
        case's':
            ofstream monFlux(lienFichier.c_str());
            monFlux.close(); // on ouvre le fichier en écriture et on le ferme, ca le rend vide
            lire(db);//, numeroFiche);
            break;
        }
      } while (!fin);
     
      return 0;
    }
    merci de votre aide
    Cordialement

  3. #3
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut
    Bonjour à tous,
    aucune réponse à ma question ?
    bon weekend

  4. #4
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    décembre 2015
    Messages
    1 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : décembre 2015
    Messages : 1 382
    Points : 6 683
    Points
    6 683
    Par défaut
    Bonjour,

    Supprime les lignes 5 et 6. Elles utilisent des include du C directement, il ne faut jamais faire cela, et heureusement tu n'utilises aucun des objets de ces fichiers.
    Que penses-tu faire lignes 41, 45 et 50? En tout cas, ça n'est pas : copier le contenu de la variable mot (qui contient le dernier mot lu) à l'endroit où il faut la mémoriser. La plupart des compilateurs émettent pour ces lignes quelque chose comme "statement has no effect".
    D'autre part avoir nom, prenom et numero sous la forme d'une tableau de char plutôt que std::string risque de complexifier inutilement ton code.

  5. #5
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut
    merci Dalfab pour ta réponse,
    1) supprimer 5 et 6 : aie ! mais oui je les utilise et apparemment elles marchent je suis sous Windows
    #include <stdlib.h> pour les fonctions dir (lister le dossier comme on le faisait sous dos)
    #include <string.h> est utilisé pour strcmp dans la fonction recherche

    2)
    Que penses-tu faire lignes 41, 45 et 50? En tout cas, ça n'est pas : copier le contenu de la variable mot (qui contient le dernier mot lu) à l'endroit où il faut la mémoriser.
    justement je voudrais bien lire les variables contenues dans mon fichier et les enregistrer dans ma structure, mais j'ai consulté plein de tutos et fait plein d'essai avec des références ou des pointeurs mais je n'y arrive pas. (par contre à un moment ca a fonctionné, mais je ne sais pas pourquoi ca n'a plus marché après et je n'avais pas fait de backup de mon fichier.
    si je mets les paramètres de ma structure en string plutôt qu'en char ma fonction recherche ne marche plus (celle qui est écrite en C)
    Tout ca n'est pas très grave car c'est juste pour apprendre pour moi (je suis retraité et n'ai pas d'objectif professionnel), mais ca m'agace car je crois que j'y ai passé une vingtaine d'heures sans résultat (pour 165 lignes de code j'avoue c'est pitoyable

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    6 861
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 6 861
    Points : 31 488
    Points
    31 488
    Billets dans le blog
    4
    Par défaut
    C++17 introduit std::filesystem.
    Et quand bien même tu aurais besoin d'utiliser l'API C de dir - je n'ai encore jamais utilisé std::filesystem mais ai souvent utilisé dir dans de vieux programmes -, rien n'oblige à utiliser strcmp et les chaînes de char du C de partout.
    De toute façon tu n'utilises même pas cet API, tu fais appel à system("dir")...
    Pourquoi utiliser une std::string pour lienFichier pour ensuite avoir une vieille structure de char[] ?
    Pourquoi avoir ces fonctions libres qui travaillent sur des pointeurs ?
    Si tu veux faire du C, assume et fais du C. Mais c'est le forum à côté.
    Si tu prétends faire du C++, ce code est loin d'en être.

    Liste non exhaustive des problèmes
    > Des variables globales sans bonne raison.
    > Des tableaux statiques à la C quand std::vector existe.
    > Utilisation de system.
    > existant[numeroFiche].nom;, existant[numeroFiche].prenom; & existant[numeroFiche].numero; qui ne servent à rien.
    > std::isalpha, std::tolower.
    > Des itérations avec des index magiques quand une fonction split rendrait le tout infiniment plus lisible.
    > Une accumulation de fonction libres qui prennent un pointeur en paramètres et utilisent des globales quand il devrait s'agir d'une classe avec fonction membre pour gérer un fichier d'enregistrements.
    > Une fonction lire qui lit un fichier pour ne rien faire d'autre qu'afficher des trucs dans la console.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    décembre 2015
    Messages
    1 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : décembre 2015
    Messages : 1 382
    Points : 6 683
    Points
    6 683
    Par défaut
    Si nom est un std::string la ligne 41 doit être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    existant[numeroFiche].nom = mot;
    Il faut aussi simplifier les lignes 77 et 82 pour utiliser des std::string.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	while ( index < taille  &&  db[index].nom != search )
    Sinon pour un tableau de char, il faut copier tous les caractères:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    strcpy( existant[numeroFiche].nom , mot.c_str() );  // on écrit du C au lieu de C++, dangereux, inclure <cstring>
    // ou en s'assurant du non débordement du tableau
    std::assert( mot.lenth() < std::size(existant[numeroFiche].nom) );
    std::copy_n( mot.data() , mot.lenth()+1, existant[numeroFiche].nom ); // inclure <algorithm>
    Et en effet, le fait de mélanger les 2 langages crée un code nettement plus lourd.

  8. #8
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut
    Merci Dalfab pour ton aide précieuse et documentée.
    Tes corrections m'ont permis de comprendre certaines choses et mon petit prog fonctionne maintenant. je vais donc pouvoir avancer.

    Merci Bousk pour tes interrogations et tes pistes de réflexion, notamment std::isalpha

    Vous écrivez tous les 2 que c'est une mauvaise idée d'insérer du C dans du C++, je suis parfaitement d'accord avec vous (Dalfab j'ai modifié mes includes ligne 5 et 7 merci).
    Je voulais juste dire que malheureusement sur le net on trouve tout et n'importe quoi, et quand on est novice on se jette dans la marre avec le pavé !
    Juste l'illustration par un exemple que j'avais utilisé ! http://www.cplusplus.com/reference/cstdlib/system/ ils parlent bien de la librairie <cstdlib> mais l'exemple qu'ils fournissent est en C
    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
    /* system example : DIR */
    #include <stdio.h>      /* printf */
    #include <stdlib.h>     /* system, NULL, EXIT_FAILURE */
     
    int main ()
    {
      int i;
      printf ("Checking if processor is available...");
      if (system(NULL)) puts ("Ok");
        else exit (EXIT_FAILURE);
      printf ("Executing command DIR...\n");
      i=system ("dir");
      printf ("The value returned was: %d.\n",i);
      return 0;
    }
    bon je mets le sujet résolu
    Bonne soirée et merci encore à vous 2

  9. #9
    Responsable Systèmes


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    15 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 15 001
    Points : 34 834
    Points
    34 834
    Par défaut
    Juste l'illustration par un exemple que j'avais utilisé ! http://www.cplusplus.com/reference/cstdlib/system/ ils parlent bien de la librairie <cstdlib> mais l'exemple qu'ils fournissent est en C
    c''est normal. system() a besoin de stdlib en C et cstdlib en C++. Mais c'est une fonction que normalement on utilise pas.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  10. #10
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    c''est normal. system() a besoin de stdlib en C et cstdlib en C++. Mais c'est une fonction que normalement on utilise pas.
    d'accord merci. on utilise quoi à la place ?
    Bonne journée

  11. #11
    Responsable Systèmes


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    15 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 15 001
    Points : 34 834
    Points
    34 834
    Par défaut
    Il n'y a aucun intérêt à utiliser system() pour faire un dir. Il y a les fonctions readdir/opendir en C (en C++ utiliser les équivalents C++) qui vont te permettre de parcourir les fichiers contenus dans un dossier et surtout de pouvoir exploiter ces résultats dans ton programme. Car avec system, tu vas avoir l'affichage dans la console mais sans pouvoir récupérer celui-ci.

    en gros system revient à bloquer le flux de ton programme pour appeler un terminal externe ("cmd.exe /c dir" sous windows pour appeler dir), flux qui reprendra à la fin de la commande externe.

    Après si tu veux pas te faire chier à gérer en C l'affichage du contenu d'un répertoire, ça peut être envisageable, mais dans ce cas tu aurais probablement pu faire un script .bat pour faire ce que tu as à faire plutôt qu'un programme C.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  12. #12
    Membre régulier
    Homme Profil pro
    retraité développement loisirs
    Inscrit en
    janvier 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité développement loisirs

    Informations forums :
    Inscription : janvier 2012
    Messages : 147
    Points : 85
    Points
    85
    Par défaut
    Merci chrtophe,
    de toute façon tu as compris je suppose que ce programme ne sert à rien, c'est juste pour apprendre et tester.
    Tu me donnes une idée, je vais faire un fichier.bat et je vais l'appeler depuis une fonction de mon prog sans faire appel à "system"

  13. #13
    Responsable Systèmes


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    15 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 15 001
    Points : 34 834
    Points
    34 834
    Par défaut
    L'usage premier de system() est effectivement à l'apprentissage.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

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

Discussions similaires

  1. [AC-2010] DLookup dans une BDD qui ne marche pas
    Par Pikapi27 dans le forum VBA Access
    Réponses: 1
    Dernier message: 02/07/2016, 12h33
  2. [Débutant] Petit programme d'entrainement qui ne marche pas
    Par Banls dans le forum C#
    Réponses: 3
    Dernier message: 20/11/2015, 18h16
  3. [AJAX] Petit essai qui ne marche pas
    Par codeur71 dans le forum AJAX
    Réponses: 9
    Dernier message: 25/02/2012, 11h15
  4. Petit scrtip bash qui ne marche pas..
    Par Fritzoune dans le forum Linux
    Réponses: 4
    Dernier message: 15/06/2005, 16h35
  5. Réponses: 9
    Dernier message: 07/05/2003, 13h57

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