Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [c] scambio data da ita a eng
Forum - C/C++ - [c] scambio data da ita a eng

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Marte111 (Normal User)
Rookie


Messaggi: 33
Iscritto: 12/02/2014

Segnala al moderatore
Postato alle 17:35
Lunedì, 12/05/2014
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:
Codice sorgente - presumibilmente C/C++

  1. printf("Inserisci la data in sequenza 00-00-0000         : ");
  2.          sscanf("%d-%d-%d", &input_anno, &input_mese, &input_giorno);
  3.          fflush(stdin);
  4.         //2014-05-12



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

grazie mille.

PM Quote
Avatar
Marte111 (Normal User)
Rookie


Messaggi: 33
Iscritto: 12/02/2014

Segnala al moderatore
Postato alle 18:06
Lunedì, 12/05/2014
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:
Codice sorgente - presumibilmente C/C++

  1. void inserimento()
  2. {
  3.         finito='n';
  4.         while((finito=='n') || (finito=='N'))
  5.         {
  6.                 system("cls");
  7.                
  8.                 printf("Inserisci la data in sequenza 00 00 0000 senza trattini : ");
  9.                
  10.                 char dtm[100];
  11.                
  12.                 sscanf(dtm, "%d-%d-%d", &input_anno, &input_mese, &input_giorno);
  13.                
  14.                 //2014-05-12
  15.                
  16.                 printf("Inserisci la descrizione         : ");
  17.                 fgets(r.descrizione, 255, stdin);
  18.                
  19.                 fflush(stdin);
  20.                
  21.                 printf("Cassa (e/E) o (u/U) : ");
  22.                
  23.                 scanf("%c", &cassa);
  24.                
  25.                 if((cassa=='e') || (cassa=='E'))
  26.                 {
  27.                        
  28.                         r.cassa_scelta = 1;
  29.                        
  30.                 }else if((cassa=='u') || (cassa=='U'))
  31.                 {
  32.                        
  33.                    r.cassa_scelta = 2;
  34.                        
  35.                 }      
  36.                 fflush(stdin);
  37.                
  38.                 printf("Inserisci l'importo      : ");
  39.                 scanf("%lf", &r.importo);
  40.                
  41.                 fflush(stdin);
  42.                
  43.                 printf("Finito? S(i) oppure N(o) --> ");
  44.                 scanf("%c", &finito);
  45.                
  46.                 salva_nel_db();
  47.                
  48.         }      
  49.                
  50. }




la struttura dati della struct è cosi:

Codice sorgente - presumibilmente C

  1. typedef struct {
  2. char                    data[10];
  3. char            descrizione[256];
  4. int                                 cassa_scelta;
  5. double                       importo;
  6. }registro_dati;
  7. 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 il 12/05/2014 alle 18:08
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5460
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:32
Lunedì, 12/05/2014
Perché hai usato la

sscanf

?

Sai a cosa serve?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
Marte111 (Normal User)
Rookie


Messaggi: 33
Iscritto: 12/02/2014

Segnala al moderatore
Postato alle 12:42
Martedì, 13/05/2014
si più/meno, mi sembra che prenda più valori della scanf,

pero l'esempio lo trovato in questo codice:
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.    int day, year;
  7.    char weekday[20], month[20], dtm[100];
  8.  
  9.    strcpy( dtm, "Saturday March 25 1989" );
  10.    sscanf( dtm, "%s %s %d  %d", weekday, month, &day, &year );
  11.  
  12.    printf("%s %d, %d = %s\n", month, day, year, weekday );
  13.    
  14.    return(0);
  15. }



e all'indirizzo: http://www.tutorialspoint.com/c_standard_library/c_functio ...

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

grazie mille.

PM Quote
Avatar
gcali (Normal User)
Newbie


Messaggi: 12
Iscritto: 23/03/2014

Segnala al moderatore
Postato alle 15:05
Martedì, 13/05/2014
sscanf() prende in input dati formattati da una stringa, non dallo stdin. E non è vero che prende più valori della scanf(). Ecco qui: http://www.tutorialspoint.com/c_standard_library/c_functio ....

Nel tuo codice

Codice sorgente - presumibilmente C/C++

  1. char dtm[100];            
  2. 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 il 13/05/2014 alle 15:06
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 15:38
Giovedì, 15/05/2014
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à! :)


ha allegato un file: classe data.zip (88404 bytes)
Clicca qui per scaricare il file
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 16:00
Giovedì, 15/05/2014
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.

Codice sorgente - presumibilmente C#

  1. // Verifica se c e' o non e' una cifra numerica 0-9.
  2.  
  3. bool Cifra( char c ) {
  4.     return ( c>='0' && c<='9' );
  5. }
  6.  
  7.  
  8. // Analizza la stringa s e immette [g]iorno, [m]ese e [a]nno nei parametri
  9. // passati per indirizzo.
  10.  
  11. void Estrai_GMA( const char *s, int *g, int *m, int *a ) {
  12.     // salta gli eventuali caratteri "non cifra" in testa alla stringa
  13.     for( ; !Cifra(*s) && *s; s++ );
  14.     // ricava il giorno dalla stringa
  15.     *g = atoi( s );
  16.     // passa al primo carattere "non cifra" dopo il giorno (il separatore)
  17.     for( ; Cifra(*s) && *s; s++ );
  18.     // passa oltre i caratteri "non cifra" dopo il giorno (il separatore)
  19.     for( ; !Cifra(*s) && *s; s++ );
  20.     // ricava il mese dalla stringa
  21.     *m = atoi( s );
  22.     // passa al primo carattere "non cifra" dopo il mese (il separatore)
  23.     for( ; Cifra(*s) && *s; s++ );
  24.     // passa oltre i caratteri "non cifra" dopo il mese (il separatore)
  25.     for( ; !Cifra(*s) && *s; s++ );
  26.     // ricava l'anno dalla stringa
  27.     *a = atoi( s );
  28. }


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5460
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 16:22
Giovedì, 15/05/2014
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 ...
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 18:29
Giovedì, 15/05/2014
Non ci sono no, i dati nella stringa, l'avevi già fatto notare e non mi sembrava il caso di ritornarci. Può sempre riempire un "buffer" con gets(), però, e usarlo nella funzione che ho riportato.

Codice sorgente - presumibilmente C/C++

  1. char buffer[32];
  2. int g, m, a;
  3.  
  4. gets( buffer );
  5.  
  6. if( buffer != NULL )
  7.     Estrai_GMA( buffer, &g, &m, &a );



Se uno si fida e vuole saltare il controllo di un possibile puntatore NULL restituito da gets() può addirittura sintetizzare così:

Codice sorgente - presumibilmente C/C++

  1. char buffer[32];
  2. int g, m, a;
  3.  
  4. Estrai_GMA( gets(buffer), &g, &m, &a );



Io di solito mi trovo bene con una cosa del genere.

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo