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:
la struttura dati della struct è cosi:
e poi ci sono int input_giorno, int input_mese, int input_anno.
idea?
grazie mille e a domani.. buona serata.
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
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:
e all'indirizzo: tutorialspoint.com/c_standard_library/…
Ma come faccio ad fare solo 2014-05-12.
grazie mille.
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
copi in input_anno, input_mese e input_giorno i dati contenuti in dtm (indefiniti, perché non è stato inizializzato).
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 ); }