Intendevo , di creare delle funzioni per inserirgli dentro il codice e richiamarle dallo switch
Faccio un esempio con variabili globali per non dover modificare molto il codice già scritto![]()
codice:#include <stdio.h> #include <stdlib.h> #include <math.h> /* FUORI DAL MAIN LE VARIABILI SONO GLOBALI ACCESSIBILI DA OGNI FUNZIONE*/ long int ore,minuti,secondi,min,km,intpartMI,intpart0I,intpartSI; long int giorno,mese,anno; float kilometri,km_totali,metrisecondo; long int kilometriinmetri; long int tempoinsecondi; long int tempoinminuti; float metrialsecondo; float minutialkilometro; float tempris; double fractpart,intpart; long int minuti1,secondi1,secondim; char scelta1; char scelta2; char scelta3; int scelta; long int cu; unsigned calorie,calorie_totali; long int oretot,minutitot,seconditot,sommasecondi; double fractpartO,intpartO,fractpartM,intpartM,orepart,minutipart,secondipart,fractpartS,intpartS; main() {
esempio di switch con chiamate ad altre funzioni
QUESTO
codice:scelta==1; printf("\nHai scelto di registrare un nuovo allenamento\n\n"); nuovidati: /* INSERIMENTO DATI E CONTROLLI SU DATA*/ printf("Inserisci data nel formato DD-MM-YYYY:\n\n"); scanf("%d-%d-%d",&giorno,&mese,&anno); if(giorno>31) { printf("Hai inserito una data non corretta idiota.!\n\n"); goto nuovidati; } else if(mese>12) { printf("Hai inserito una data non corretta idiota.!\n\n"); goto nuovidati; } else if(giorno<0) { printf("Hai inserito una data non corretta idiota.!\n\n"); goto nuovidati; } else if(mese<0) { printf("Hai inserito una data non corretta idiota.!\n\n"); goto nuovidati; } printf("\nInserisci km separati da un punto : \n\n"); scanf("%f",&kilometri); printf("\nInserisci il tempo nel formato HH:MM:SS : \n\n"); scanf("%d:%d:%d",&ore,&minuti,&secondi); printf("\nInserisci calorie bruciate:\n\n"); scanf("%d",&cu); printf("\nHai inserito i seguenti dati:\n\n"); /* VERIFICA DATI INSERITI*/ printf("Data allenamento: %0.2d-%0.2d-%d\n",giorno,mese,anno); printf("Kilometri ultima sessione: %.2f km\n",kilometri); printf("Tempo impiegato nell'ultima sessione: %0.2d:%0.2d:%0.2d\n",ore,minuti,secondi); printf("Calorie bruciate ultima sessione: %d \n\n",cu); printf("I dati inseriti sono corretti?\n"); printf("Digita y se si, n se no\n"); scelta1=getchar(); scanf("%cn",&scelta1); if(scelta1=='y') /* CALCOLO VELOCITà E COSE VARIE*/ { printf("\nBene, procediamo!!\t\n\n\n"); kilometriinmetri=(kilometri*1000); printf("\nMetri percorsi: %d\n\n",kilometriinmetri); tempoinsecondi=(ore*3600)+(minuti*60)+secondi; printf("Tempo in secondi : %d\n\n",tempoinsecondi); tempoinminuti=(ore*60)+minuti; printf("Tempo in minuti e secondi : %0.2d:%0.2d\n\n",tempoinminuti,secondi); metrialsecondo=((float)kilometriinmetri/tempoinsecondi); printf("Metri al secondo : %.3f\n\n",metrialsecondo); tempris=((float)tempoinsecondi)/60; minutialkilometro=tempris/kilometri; fractpart=modf(minutialkilometro,&intpart); minuti1=((int)intpart); secondim=(fractpart*60); secondi1=((int)secondim); printf("Minuti al kilometro: %0.2d:%0.2d\n\n",minuti1,secondi1); /* SCRITTURA ULTIMO RECORD SU FILE*/ printf("Inizio a scrivere su file...\n\n"); fprintf(fp,"Data : %0.2d-%0.2d-%d\n",giorno,mese,anno); fprintf(fp,"Kilometri : %.2f\n",kilometri); fprintf(fp,"Tempo : %0.2d:%0.2d:%0.2d\n",ore,minuti,secondi); fprintf(fp,"Calorie : %d \n",cu); fprintf(fp,"Metri/Secondo : %.3f\n",metrialsecondo); fprintf(fp,"Minuti/Kilometro : %0.2d:%0.2d\n\n",minuti1,secondi1); fflush(fp); fclose(fp); printf("Fatto!!\n\n\n\n"); /* FINE SCRITTURA */ /*Visualizzare precedenti*/ printf("\n\nVuoi inserire un altro record?\n\n"); printf("Digita y se si', n se no\n"); scelta3=getchar(); scanf("%cn",&scelta3); if(scelta3=='y') { goto nuovidati; } else { printf("\n\nVuoi visualizzare le statistiche precedenti?\n\n"); printf("Digita y se si', n se no\n"); scelta2=getchar(); scanf("%cn",&scelta2); if(scelta2=='y') goto visualizzazione; else return 0; } } else if(scelta1=='n') { printf("E sei un pirla allora\n"); printf("Riproviamo:\n\n"); goto nuovidati; } break;
DIVENTEREBBE
Che è quello che hai scritto tu senza nessuna modifica SOLO INSERITO IN DUE FUZIONIcodice:#include <stdio.h> #include <stdlib.h> #include <math.h> /* FUORI DAL MAIN LE VARIABILI SONO GLOBALI ACCESSIBILI DA OGNI FUNZIONE*/ long int ore,minuti,secondi,min,km,intpartMI,intpart0I,intpartSI; long int giorno,mese,anno; float kilometri,km_totali,metrisecondo; long int kilometriinmetri; long int tempoinsecondi; long int tempoinminuti; float metrialsecondo; float minutialkilometro; float tempris; double fractpart,intpart; long int minuti1,secondi1,secondim; char scelta1; char scelta2; char scelta3; int scelta; long int cu; unsigned calorie,calorie_totali; long int oretot,minutitot,seconditot,sommasecondi; double fractpartO,intpartO,fractpartM,intpartM,orepart,minutipart,secondipart,fractpartS,intpartS; void Registra_allenamento(); void visuallizza(); main() { printf("Benvenuto nel programma allenamenti v. 0.1\n\n"); printf("Scegli cosa fare:\n\n"); printf("1) Registra nuovo allenamento\n\n"); printf("2) Visualizzare statistiche precedenti\n\n"); scanf("%d",&scelta); switch(scelta) { case 1: Registra_allenamento(); break; case 2: visualizza(); break; } }// END MAIN //PRIMA FUZIONE PER SCRIVERE SU FILE void Registra_allenamento() { short x=0; inizio: scelta=1; FILE *fp; fp=fopen("database.txt","a+"); if(fp==NULL) { printf("Impossibile aprire/creare il file.\n\n\n"); exit(1); } do { printf("\nHai scelto di registrare un nuovo allenamento\n\n"); nuovidati: /* INSERIMENTO DATI E CONTROLLI SU DATA*/ printf("Inserisci data nel formato DD-MM-YYYY:\n\n"); scanf("%d-%d-%d",&giorno,&mese,&anno); if((giorno>31)||(mese>12)||(giorno<0)||(mese<0)) { printf("Hai inserito una data non corretta idiota.!\n\n"); } else x=1; } while(x==0); printf("\nInserisci km separati da un punto : \n\n"); scanf("%f",&kilometri); printf("\nInserisci il tempo nel formato HH:MM:SS : \n\n"); scanf("%d:%d:%d",&ore,&minuti,&secondi); printf("\nInserisci calorie bruciate:\n\n"); scanf("%d",&cu); printf("\nHai inserito i seguenti dati:\n\n"); /* VERIFICA DATI INSERITI*/ printf("Data allenamento: %0.2d-%0.2d-%d\n",giorno,mese,anno); printf("Kilometri ultima sessione: %.2f km\n",kilometri); printf("Tempo impiegato nell'ultima sessione: %0.2d:%0.2d:%0.2d\n",ore,minuti,secondi); printf("Calorie bruciate ultima sessione: %d \n\n",cu); printf("I dati inseriti sono corretti?\n"); printf("Digita y se si, n se no\n"); scelta1=getchar(); scanf("%cn",&scelta1); if(scelta1=='y') /* CALCOLO VELOCITà E COSE VARIE*/ { printf("\nBene, procediamo!!\t\n\n\n"); kilometriinmetri=(kilometri*1000); printf("\nMetri percorsi: %d\n\n",kilometriinmetri); tempoinsecondi=(ore*3600)+(minuti*60)+secondi; printf("Tempo in secondi : %d\n\n",tempoinsecondi); tempoinminuti=(ore*60)+minuti; printf("Tempo in minuti e secondi : %0.2d:%0.2d\n\n",tempoinminuti,secondi); metrialsecondo=((float)kilometriinmetri/tempoinsecondi); printf("Metri al secondo : %.3f\n\n",metrialsecondo); tempris=((float)tempoinsecondi)/60; minutialkilometro=tempris/kilometri; fractpart=modf(minutialkilometro,&intpart); minuti1=((int)intpart); secondim=(fractpart*60); secondi1=((int)secondim); printf("Minuti al kilometro: %0.2d:%0.2d\n\n",minuti1,secondi1); /* SCRITTURA ULTIMO RECORD SU FILE*/ printf("Inizio a scrivere su file...\n\n"); fprintf(fp,"Data : %0.2d-%0.2d-%d\n",giorno,mese,anno); fprintf(fp,"Kilometri : %.2f\n",kilometri); fprintf(fp,"Tempo : %0.2d:%0.2d:%0.2d\n",ore,minuti,secondi); fprintf(fp,"Calorie : %d \n",cu); fprintf(fp,"Metri/Secondo : %.3f\n",metrialsecondo); fprintf(fp,"Minuti/Kilometro : %0.2d:%0.2d\n\n",minuti1,secondi1); fflush(fp); fclose(fp); printf("Fatto!!\n\n\n\n"); /* FINE SCRITTURA */ /*Visualizzare precedenti*/ printf("\n\nVuoi inserire un altro record?\n\n"); printf("Digita y se si', n se no\n"); scelta3=getchar(); scanf("%cn",&scelta3); if(scelta3=='y') { goto inizio; } else { printf("\n\nVuoi visualizzare le statistiche precedenti?\n\n"); printf("Digita y se si', n se no\n"); scelta2=getchar(); scanf("%cn",&scelta2); if(scelta2=='y') visualizza(); } } else if(scelta1=='n') { printf("E sei un pirla allora\n"); printf("Riproviamo:\n\n"); goto inizio; } } //SECONDA FUNZIONE PER LEGGERE DA FILE void visualizza() { scelta=2; printf("\nHai scelto di visualizzare le statistiche precedenti\n"); FILE *fp; fp=fopen("database.txt","r"); if(fp==NULL) { printf("Impossibile aprire/creare il file.\n\n\n"); exit(1); } calorie_totali=0; km_totali=0; oretot=0; minutitot=0; seconditot=0; while(!feof(fp)) { fscanf(fp,"Data : %d-%d-%d\n",&giorno,&mese,&anno); fscanf(fp,"Kilometri : %f\n",&kilometri); fscanf(fp,"Tempo : %d:%d:%d\n",&ore,&minuti,&secondi); fscanf(fp,"Calorie : %d\n",&calorie); fscanf(fp,"Metri/Secondo : %f\n",&metrisecondo); fscanf(fp,"Minuti/Kilometro : %d:%d\n",&min,&km); km_totali+=kilometri; calorie_totali+=calorie; oretot+=ore; minutitot+=minuti; seconditot+=secondi; } printf("\nKilometri Totali : %0.2f",km_totali); printf("\nCalorie Totali : %d\n",calorie_totali); sommasecondi=(oretot*3600)+(minutitot*60)+seconditot; orepart=((float)sommasecondi)/3600; fractpartO=modf(orepart,&intpartO); intpart0I=((int)intpartO); minutipart=fractpartO*60; fractpartM=modf(minutipart,&intpartM); intpartMI=((int)intpartM); secondipart=fractpartM*60; fractpartS=modf(secondipart,&intpartS); intpartSI=((int)intpartS); printf("Tempo Totale : %0.2d:%0.2d:%0.2d\n",intpart0I,intpartMI,intpartSI); fclose(fp); }

Rispondi quotando