Oppure

Loading
12/05/14 15:35
Marte111
Ciao vorrei convertire la data in italiano ad quella in inglese e poi memorizzarla nell'archivio dati ed essendo che il campo è date .

Ora il codice che sto facendo è cosi:
printf("Inserisci la data in sequenza 00-00-0000	 : ");
	 sscanf("%d-%d-%d", &input_anno, &input_mese, &input_giorno);
	 fflush(stdin);
	//2014-05-12


come posso fare per far che mi venga: 2014-05-12 salvato e inserita dall'utente 12-05-2014?

grazie mille.
aaa
12/05/14 16:06
Marte111
ho quasi fatto .. ma non so il motivo perché mi chiede subito entrata o uscita. e mi salta l'inserimento della descrizione..
vi posto il codice:
void inserimento()
{
	finito='n';
	while((finito=='n') || (finito=='N'))
	{
		system("cls");
		
		printf("Inserisci la data in sequenza 00 00 0000 senza trattini : ");
		
		char dtm[100];
		
		sscanf(dtm, "%d-%d-%d", &input_anno, &input_mese, &input_giorno);
		
		//2014-05-12
		
		printf("Inserisci la descrizione 	 : ");
		fgets(r.descrizione, 255, stdin);
		
		fflush(stdin);
		
		printf("Cassa (e/E) o (u/U) : ");
		
		scanf("%c", &cassa);
		
		if((cassa=='e') || (cassa=='E'))
		{
			
			r.cassa_scelta = 1;
			
		}else if((cassa=='u') || (cassa=='U'))
		{
			
		   r.cassa_scelta = 2;
		  	
		}	
		fflush(stdin);
		
		printf("Inserisci l'importo	 : ");
		scanf("%lf", &r.importo);
		
		fflush(stdin);
		
		printf("Finito? S(i) oppure N(o) --> ");
		scanf("%c", &finito);
		
		salva_nel_db();
		
	}	
		
}



la struttura dati della struct è cosi:

typedef struct {
char                    data[10];
char	        descrizione[256]; 
int		   		    cassa_scelta;
double   	             importo; 
}registro_dati;
registro_dati r;


e poi ci sono int input_giorno, int input_mese, int input_anno.



idea?

grazie mille e a domani.. buona serata.
Ultima modifica effettuata da Marte111 12/05/14 16:08
aaa
12/05/14 18:32
nessuno
Perché hai usato la

sscanf

?

Sai a cosa serve?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
13/05/14 10:42
Marte111
si più/meno, mi sembra che prenda più valori della scanf,

pero l'esempio lo trovato in questo codice:
#include <stdio.h>
#include <stdlib.h>

int main()
{
   int day, year;
   char weekday[20], month[20], dtm[100];

   strcpy( dtm, "Saturday March 25 1989" );
   sscanf( dtm, "%s %s %d  %d", weekday, month, &day, &year );

   printf("%s %d, %d = %s\n", month, day, year, weekday );
    
   return(0);
}


e all'indirizzo: tutorialspoint.com/c_standard_library/…

Ma come faccio ad fare solo 2014-05-12.

grazie mille.
aaa
13/05/14 13:05
gcali
sscanf() prende in input dati formattati da una stringa, non dallo stdin. E non è vero che prende più valori della scanf(). Ecco qui: tutorialspoint.com/c_standard_library/….

Nel tuo codice

char dtm[100];             
sscanf(dtm, "%d-%d-%d", &input_anno, &input_mese, &input_giorno);


copi in input_anno, input_mese e input_giorno i dati contenuti in dtm (indefiniti, perché non è stato inizializzato).
Ultima modifica effettuata da gcali 13/05/14 13:06
aaa
15/05/14 13:38
Marte111, non so se potrà esserti utile perché è in C++ e non in C, però qualche tempo fa ho messo insieme una classe che potresti usare per "aggirare" l'ostacolo (spero). L'ho provata e riprovata e mi sembra che funzioni tutto a dovere, ma tieni presente che non sono un programmatore e quindi potrei essere incorso in errori e ingenuità. Apprezza la buona volontà! :)
15/05/14 14:00
Magari potresti invece considerare questa coppia di funzioni, che analizzano una stringa "a caccia" di giorno, mese e anno. Volendo puoi invertire l'ordine dei dati cercati come preverisci (ad esempio anno, mese, giorno, o qualsiasi altra combinazione). Nota che è un metodo che "tollera" che vengano scritte date anche in modo impreciso, tipo "sf24/6/ù14hhh", che verrà comunque letto come 24 giugno 2014.

// Verifica se c e' o non e' una cifra numerica 0-9.

bool Cifra( char c ) {
    return ( c>='0' && c<='9' );
}


// Analizza la stringa s e immette [g]iorno, [m]ese e [a]nno nei parametri
// passati per indirizzo.

void Estrai_GMA( const char *s, int *g, int *m, int *a ) {
    // salta gli eventuali caratteri "non cifra" in testa alla stringa
    for( ; !Cifra(*s) && *s; s++ );
    // ricava il giorno dalla stringa
    *g = atoi( s );
    // passa al primo carattere "non cifra" dopo il giorno (il separatore)
    for( ; Cifra(*s) && *s; s++ );
    // passa oltre i caratteri "non cifra" dopo il giorno (il separatore)
    for( ; !Cifra(*s) && *s; s++ );
    // ricava il mese dalla stringa
    *m = atoi( s );
    // passa al primo carattere "non cifra" dopo il mese (il separatore)
    for( ; Cifra(*s) && *s; s++ );
    // passa oltre i caratteri "non cifra" dopo il mese (il separatore)
    for( ; !Cifra(*s) && *s; s++ );
    // ricava l'anno dalla stringa
    *a = atoi( s );
}
15/05/14 14:22
nessuno
Aldo ... forse il discorso non è chiaro ... il problema non è estrarre i dati dalla stringa (per cui la singola sscanf va benissimo) ... il problema è che nella stringa i dati NON ci sono. Ok?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.