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 :

Erreur ecriture Lambda


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Deficient visuel
    Inscrit en
    Mai 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Deficient visuel

    Informations forums :
    Inscription : Mai 2019
    Messages : 216
    Par défaut Erreur ecriture Lambda
    Bonjour a toutes et a tous ,

    J'ai ce petit bout de 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
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <limits>
     
    using namespace std;
     
    template<typename T>
    void saisies_secure(T &variable)
    {
     while(!(cin >> variable))
      cout <<"Entrez incorrecte ,recommence" << endl;
      cin.clear();
      cin.ignore(numeric_limits<streamsize>::max(),'\n');
    }
     
    template<typename T,typename Predicat>
    void saisies_secure(T &variable,Predicat predicat)
    {
     while(!(cin >> variable)||!predicat(variable))
     {
      cout <<"Saisie incorrecte.Recommence " <<endl;
      cin.clear();
      cin.ignore(numeric_limits<streamsize>::max(),'\n');
     }
    }
     
     struct Informations
     {
      string prenom;
      string nom ;
      string sexe;
      int age;
     };
     
     Informations demandeInfo()
     {
      Informations infos{};
      cout << "Quel es votre prenom ?"<< endl;
     
      saisies_secure(infos.prenom,[](string prenom){ return prenom.find_first_not_of("abcdefghijklmnopqrstuvwxyz ");});
     
      cout <<"Quel est votre nom ?"<< endl;
      saisies_secure(infos.nom);
     
      cout << "Quel est votre sexe ?" << endl;
      saisies_secure(infos.sexe);
     
      cout <<"Quel est votre age ?" << endl;
      saisies_secure(infos.age , [](int &age){return age >0 && age < 100 && 
      age.find_first_not_of("123456789");});
     
      return infos;
     }
     
     string enregistre(Informations const &infos)
     {
      string nom_fichier { infos.prenom + "." + infos.nom + ".csv" };
      ofstream fichier { nom_fichier };
      if(fichier.is_open())
      {
        fichier << infos.nom << ',' << infos.prenom << ',' << infos.sexe << ',' << infos.age;
      }
      else cout << "Unable to open file" << endl;
        return nom_fichier;
     }
     
     void lecture( Informations const &infos )
     {
      string line;
      ifstream nom_fichier(infos.prenom + "." + infos.nom + ".csv");
      if(nom_fichier.is_open())
      {
       cout << "Le contenu de ton fichier est :" << endl;
       while(getline(nom_fichier,line))
       {
        cout << line << endl;
       }
      }else cout << "Unable to open file " << endl;
     }
     
     int main()
     {
      auto infos = demandeInfo();
      auto nom_fichier= enregistre(infos);
      cout << "Le fichier "<< nom_fichier << " a été enregistré " << endl;
      lecture(infos);
     
      return 0;
     }
    Cette partie me pose probleme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    saisies_secure(infos.age , [](int &age){return age >0 && age < 100 && 
      age.find_first_not_of("123456789");});
    Qu'aurai je du faire pour que ca compile ?
    Merci de votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 599
    Par défaut
    Bonjour,

    En fait que cherches tu à faire quand tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    return age >0 
           && age < 100
           && age.find_first_not_of("123456789");
    tu veux que l'age soit entre 1 à 99 ans et ???
    Le troisième terme n'a pas vraiment de sens, tu cherches le 1er caractère qui n'est pas un chiffre, ça n'est donc :
    - pas un booléen (vrai ou faux) qui obtenu !!!
    - c'est une recherche dans une chaîne, mais age est un int !!!
    - et dans un int si pouvait en regarder les caractères il n'y aura forcément que des chiffres !!!

    Pour corriger je virerais ce troisième terme.

  3. #3
    Membre confirmé
    Homme Profil pro
    Deficient visuel
    Inscrit en
    Mai 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Deficient visuel

    Informations forums :
    Inscription : Mai 2019
    Messages : 216
    Par défaut
    En fait , je voulais seulement informer l'utilisateur qu'il avait entré des lettres a la place de chiffres et inversement pour les lettres et j'ai choisit la lambda pour le faire .
    Visiblement je maitrise pas . Comment aurai je du faire ?

    Mais tu as tout a fait raison ,j'ai viré la derniere partie et ca fonctionne , impossible de rentrer des lettres a la place de chiffres pour la variable " age " sans avoir un message d'erreur .
    Ho la honte , je suis trop nul

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

Discussions similaires

  1. [Eclipse] JDK 14.0.1 et erreur avec lambda expression
    Par philou44300 dans le forum Général Java
    Réponses: 1
    Dernier message: 07/05/2020, 14h52
  2. Erreur Ecriture d'un set<string> dans un fichier.
    Par jamsgoodon dans le forum Débuter
    Réponses: 3
    Dernier message: 29/01/2011, 11h03
  3. Erreur, ecriture d'une matrice dans un fichier
    Par Lorddolf dans le forum MATLAB
    Réponses: 7
    Dernier message: 12/07/2010, 22h19
  4. erreur d'ecriture dans un fichier
    Par fjp dans le forum C++Builder
    Réponses: 4
    Dernier message: 03/07/2005, 11h31

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