Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. 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: 6379
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 ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
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: 6379
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 ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
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