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 :

Pb lecture d'une struct date [Débutant(e)]


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 55
    Points : 42
    Points
    42
    Par défaut Pb lecture d'une struct date
    Voici le prog
    En fait j'ai un pb concernant la saisi d'uen struct date.
    Ce qui est saisi est forcément de type string ,non?
    Comment le mettre dans ma struct date?
    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
    #include <cstdlib>
    #include <iostream>
     
    struct Date { int d; int m; int y;};
     
     void aff(struct Date D)
    {
     std::cout << D.d;
     std::cout << D.m;
     std::cout << D.y;
     };
     
      void lis()
    {
     std::string s;
     Date D2;
     std::cin >> s;
     
     };
     
      void init(struct Date D1)
    {
     Date D3;
     D3.d = D1.d;
     D3.m = D1.m;
     D3.y = D1.y;
     aff(D3);
     };
     
    int main()
    {
       Date D1 = {20,10,05};
       aff(D1);
       lis();
       init(D1);
     
        system("PAUSE");
        return 0;
    }
    Merci pour vos conseils

  2. #2
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut Re: Pb lecture d'une struct date
    salut,

    Citation Envoyé par smag
    Ce qui est saisi est forcément de type string ,non?
    euh... ben non. tout peut être saisie. int, double, string, char...
    on peut aussi utiliser les flux (>>,<<) pour des classes perso, il suffit dans ce cas de surcharger les opérateurs pour ladite classe.

    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
    #include <iostream>
     
    using std::cout;
    using std::cin;
    using std::endl;
    using std::ostream;
    using std::istream;
     
    struct Date
    {
    	int d;
    	int m;
    	int y;
     
    	Date(int dd=0,int mm=0, int yy=0)
    		:d(dd),m(mm),y(yy)
    	{}
    };
     
    ostream& operator << (ostream& flux, Date & D)
    {
    	flux << D.d << "\\" << D.m << "\\" << D.y;
    	return flux;
    }
     
    istream& operator >> (istream& flux, Date & D)
    {
    	flux >> D.d >> D.m >> D.y;
    	return flux;
    }
     
    int main ()
    {
    	Date D1;
    	Date D2;
    	cout << "Entrez une date : ";
    	cin >> D1;
    	cout << "Entrez une autre date : ";
    	cin >> D2;
    	cout << "Vous avez entrez ces dates : " << D1 << " et " << D2 << endl;
    	cout << "Moi je vous propose plutot ces dates : " << Date(01,01,1970) << " et " << Date(03,03,2005) << endl;
    	return EXIT_SUCCESS;
    }
    testé, no problemo.


  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 55
    Points : 42
    Points
    42
    Par défaut
    Oui ok mais dans ce cas je suis obligé alors de surcharger >>, c bien ça?
    D'autre part avec ta solution lorsque je saisi D2, il faut que je rentre l jour puis entré puis le mois puis entrée puis l'année puis entrée laors que je voudrais saisir tout d'un coup puis entréé

  4. #4
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    salut,

    si tu ne veux pas surcharger >> et << alors tu peux reprendre le code en changeant seulement le nom de la fonction.

    tu peux entrer une date en une seule fois. au lieu de faire ENTRER à chaque fois, tu peux tout saisir en mettant des espaces

    "Entrez une date : 01 05 2001 " ENTRER
    "Entrez une autre date : 25 09 2002" ENTRER

    bien sur le code que je t'ai donné n'est qu'un exemple pour te donner les bases. après tu peux mettre ça à ta sauce en fonction de tes besoins.


  5. #5
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 150
    Points : 180
    Points
    180
    Par défaut
    Dans ce cas il te faudra parser la string saisie en recherchant des separateurs (- ou / par exemple)...

    C'est un peu plus compliqué, mais c'est plus joli à l'utilisation.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 55
    Points : 42
    Points
    42
    Par défaut
    ok d'accord
    et supposons que je rentre une string
    y'a t il un moyen de dire je lis à partir de l 1ère lettre sur une longueur de trois
    ?

    par ex je rentre "xabcdefds"
    je veux travailler sur xa puis ab puis bc ... puis ds.
    Comment puis-je faire?

  7. #7
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    si tu rentres les lettres collées comme dans ton exemple, alors mets tout dans un std::string.

    après tu peux extraire des sous-chaines avec la méthode string substr(...) de la classe string



    http://www.developpez.net/forums/vie...716599#1716599

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 55
    Points : 42
    Points
    42
    Par défaut
    euh oui quand je saisi 20/10/05 Il m'affiche 20105 le 05 il l'a pris comme un 5, comment ej fais?

  9. #9
    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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Si tu récupères la saisie dans un string, le 0 ne devrait pas bouger.

    Si tu récupères ça dans un entier par contre, et que tu veux ensuite remettre le zéro lors de l'affichage, tu peux par exemple utiliser les manipulateurs de flux (setfill('0') et setw(2) dans ton cas).

  10. #10
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Citation Envoyé par mtopoloff
    Dans ce cas il te faudra parser la string saisie en recherchant des separateurs (- ou / par exemple)...

    C'est un peu plus compliqué, mais c'est plus joli à l'utilisation.
    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
     
    #include <iostream>
    #include <sstream>
    #include <string>
     
    using std::cout;
    using std::cin;
    using std::endl;
    using std::ostream;
    using std::istream;
    using std::string;
    using std::istringstream;
     
     
    struct Date
    {
    	int d;
    	int m;
    	int y;
     
    	Date(int dd=0,int mm=0, int yy=0)
    		:d(dd),m(mm),y(yy)
    	{}
    };
     
     
    bool from_string(Date & D)
    {
    	string Str;
    	cin >> Str;
    	int first = Str.find("/");
    	int second = Str.find("/",first+1);
     
    	istringstream jour(Str.substr(0,first));
    	istringstream mois(Str.substr(first+1,second-first-1));
    	istringstream an(Str.substr(second+1));
     
        return (jour >> D.d)&&(mois >> D.m)&&(an >> D.y);
    }
     
    ostream& operator << (ostream& flux, Date & D)
    {
    	flux << D.d << "/" << D.m << "/" << D.y;
    	return flux;
    }
     
    istream& operator >> (istream& flux, Date & D)
    {
       flux >> D.d >> D.m >> D.y;
       return flux;
    } 
     
    int main ()
    {
    	Date D1;
    	Date D2;
    	string s;
    	cout << "Entrez une date : ";
    	from_string(D1);
    	cout << D1 << endl;
    	cout << "Entrez une autre date : ";
    	cin >> D2;
    	cout << "Vous avez entrez ces dates : " << D1 << " et " << D2 << endl;
    	cout << "Moi je vous propose plutot ces dates : " << Date(01,01,1970) << " et " << Date(03,03,2005) << endl;
    	return EXIT_SUCCESS;
    }

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 55
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par Loulou24
    Si tu récupères la saisie dans un string, le 0 ne devrait pas bouger.

    Si tu récupères ça dans un entier par contre, et que tu veux ensuite remettre le zéro lors de l'affichage, tu peux par exemple utiliser les manipulateurs de flux (setfill('0') et setw(2) dans ton cas).
    Ok pour l'instant je vais choisir la deuxième solution:
    Mais si tu m'en disais un peu plus?
    Je sais j'abuse pas mal mais bon, c pas facile d'apprendre toute seule un nouveau langage avec comme suel interface un bouquin un ordi et un forum.Heuresement que y'a le forum d'ailleurs, ça me permet de comprendre beaucoup plus de choses.

  12. #12
    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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <iostream>
    #include <iomanip>
     
    using namespace std;
     
    int jour = 3, mois = 3, annee = 2005;
     
    cout << setfill('0');
    cout << setw(2) << jour << "/" << setw(2) << mois << "/" << setw(2) << annee << endl;
    Pour les détaux, je te laisse faire mumuse avec Google

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 55
    Points : 42
    Points
    42
    Par défaut
    Je te remercie.
    Quand tu mets setw et set lib comment je peux savoir çà quelle library mettre en include?

  14. #14
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Citation Envoyé par smag
    Je te remercie.
    Quand tu mets setw et set lib comment je peux savoir çà quelle library mettre en include?
    pour connaître rapidement les include relatifs à une fonction

    et dans le cas présent, regarde les include que Loulou a mis dans le code

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

Discussions similaires

  1. [POI] Problème de lecture d'une cellule de type date
    Par syrinEn dans le forum Documents
    Réponses: 2
    Dernier message: 29/06/2015, 12h10
  2. [DATA] Lecture d'une date à partir d'un texte ???
    Par Picsouli dans le forum SAS Base
    Réponses: 8
    Dernier message: 08/06/2012, 15h40
  3. [Excel] Lecture d'une cellule date
    Par Lutin1801 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 24/05/2012, 16h09
  4. [POI] Lecture d'une cellule de type date
    Par le_misterioso dans le forum Documents
    Réponses: 11
    Dernier message: 31/08/2010, 21h34
  5. Lecture d'une date dans un format étrange
    Par lr dans le forum Général Java
    Réponses: 10
    Dernier message: 24/06/2009, 14h14

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