PDA

Visualizza la versione completa : [C++]Creazione libreria e funzioni Data e Ora


barrux
21-03-2013, 19:31
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):


#ifndef LIBDATAORA_H
#define LIBDATAORA_H
class DataOra{
public:
const char *FData();
const char *FOra();};
#endif /* LIBDATAORA_H */


Questo il file cpp (dataora.cpp):


#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):


#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.

shodan
21-03-2013, 19:41
Devi restituire std::string invece di const char*, altrimenti ottieni solo spazzatura (str una variabile locale).


#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;
}

barrux
21-03-2013, 19:43
Ok grazie, ora provo :D

barrux
21-03-2013, 19:57
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 :D

Loading