Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    33

    [Risolto][C++]Creazione libreria e funzioni Data e Ora

    Ciao a tutti, ho "creato" una libreria (libdataora) che tramite due funzioni mi dovrebbe dare in ritorno rispettivamente una stringa della data odierna (con il formato AAAA/MM/GG) e una stringa con l' ora di quando è stata eseguito il programma (con il formato OO:MM:SS).

    Questo è il file della libreria (libdataora.h):
    codice:
    #ifndef LIBDATAORA_H
    #define   LIBDATAORA_H
    class DataOra{
    public:
    const char *FData();
    const char *FOra();};
    #endif   /* LIBDATAORA_H */
    Questo è il file cpp (dataora.cpp):
    codice:
    #include <stdio.h>
    #include <string.h>
    #include <time.h>
    #include <iostream>
    #include <sstream>
    #include "libdataora.h"
    using namespace std;
    
    const char* DataOra::FData()
    {
    time_t t = time(NULL);
    tm *tempo;
    tempo = localtime(&t);
    int giorno,mese,anno;
    giorno=tempo->tm_mday;
    mese=1+(tempo->tm_mon);
    anno=1900+(tempo->tm_year);
      std::ostringstream D;
    
      D << giorno << "/" << mese << "/" << anno ;
      std::cout << D.str() << std::endl;
    
    std::string str;
    str=D.str();
    const char *cstr = str.c_str();
    return cstr;
    }
    
    const char* DataOra::FOra()
    {
    time_t t = time(NULL);
    tm *tempo;
    tempo = localtime(&t);
    int ora,minuti,secondi;
    ora=tempo->tm_hour;
    minuti=tempo->tm_min;
    secondi=tempo->tm_sec;
      std::ostringstream O;
      O << ora << ":" << minuti << ":" << secondi ;
      std::cout << O.str() << std::endl;
    
    std::string str;
    
    str=O.str();
    const char *cstr = str.c_str();
    return cstr;
    }
    E questo è il file del main (main.cpp):
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include "libdataora.h"
    
    int main() {
    char d,o;
    DataOra DO;
    	d=*DO.FData();
        o=*DO.FOra();
    	//printf("%d",&d);
    	//printf("%c",&d);
    	//printf("%d",&c);
    	//printf("%c",&o);
    	printf("\n\n");
        return 0;
    }
    Il problema si crea perchè quando vado a fare il printf sul main.cpp non vengono visualizzate le stringhe corrette, infatti se faccio con %d visualizzo dei numeri (a mio parere scaturiti dalla stringa esatta della data o dell' ora, ma non so come fare per ritornare in dietro e ricavare la stringa corretta) e se faccio %c invece stampa a video dei caratteri ASCII strani, penso che sia il corrispondente del numero. Come posso risolvere ?

    PS: Questo programma mi serve, poi, per immettere dei dati all 'interno di un database MySQL, e invece di scrivere tutto su un file .cpp volevo "pulire il codice" dividendo in vari file, ognuno con delle funzioni particolari.

    Grazie.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Devi restituire std::string invece di const char*, altrimenti ottieni solo spazzatura (str è una variabile locale).
    codice:
    #ifndef LIBDATAORA_H
    #define   LIBDATAORA_H
    #include <string>
    class DataOra{
        public:
            std::string FData();
            std::string FOra();};
    #endif   /* LIBDATAORA_H */
    
    ...
    
    std::string DataOra::FData()
    {
        time_t t = time(NULL);
        tm *tempo;
        tempo = localtime(&t);
        int giorno,mese,anno;
        giorno=tempo->tm_mday;
        mese=1+(tempo->tm_mon);
        anno=1900+(tempo->tm_year);
        std::ostringstream D;
        D << giorno << "/" << mese << "/" << anno ;
        return D.str();
    }
    
    std::string DataOra::FOra()
    {
         time_t t = time(NULL);
         tm *tempo;
         tempo = localtime(&t);
         int ora,minuti,secondi;
         ora=tempo->tm_hour;
         minuti=tempo->tm_min;
         secondi=tempo->tm_sec;
         std::ostringstream O;
         O << ora << ":" << minuti << ":" << secondi ;
         return O.str();
    }
    ...
    
    int main() {
        DataOra DO;
        cout << DO.FData() << endl;
        cout << DO.FOra() << endl;
        return 0;
    }
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    33
    Ok grazie, ora provo

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    33
    Benissimo, funziona perfettamente! Grazie 1000 shodan. Solo una cosa, ho dovuto agiungere la libreria #include <iostream> sul file libdataora.h , per il resto funzionava tutto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.