Programma che crasha

di Anonimizzato18603 il
67 risposte

67 Risposte - Pagina 4

  • Nonostante faccia cosi non torna al menu principale......
    Allegati:
    nonostante faccia cosi non torna al menu principale......
    nonostante faccia cosi non torna al menu principale......
  • Il getchar() non c'entra una mazza col problema che il tuo programma non torna al menù perché non lo fa nemmeno con system().Devi rivedere il ciclo.In genere l'ossatura è questa:
    
    #include<ctype.h>
    //bla bla bla
    #define EXIT_CHAR ('N')
    
    int main(void)//(int argc,char **argv) se servono gli argomenti
    {
       int exit_status = 0;
        do
       {
       }
       while(toupper(un variabile char) != EXIT_CHAR);
        getchar();
       return exit_status;
    }
    
  • Come puoi vedere esce dal do e prosegue anche questa volta......
    Allegati:
    18603_68754783c9dc3096a693624a63d591f5.png
    18603_68754783c9dc3096a693624a63d591f5.png
  • Dopo ogni

    scanf("%c",&azione);

    inserisci una

    fflush(stdin);
  • Niente......
  • A me non succede.

    Sicuro di avere messo la fflush dopo OGNI scanf di quel tipo?

    Hai RICOMPILATO ?
  • Si.....
  • #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <conio.h>
    #include <ctype.h>
    
    
    #define MAXCHARCOD 32
    #define EXIT_CHAR ('N')
    
    
    void mainmenu();
    void inseriscipreventivo(int *numeroclienti,int *numeropreventivi);
    int controllacodfiscale(char cf[MAXCHARCOD],int numeroclienti);
    void visualizzapreventivi(int numeropreventivi);
    void visualizzazioneclienti(int numeroclienti);
    int calcolosconto(int numeropreventivi);
    
    
    
    struct cliente{
    char codfiscale[MAXCHARCOD];
    char nome[MAXCHARCOD];
    char cognome[MAXCHARCOD];
    char indirizzo[MAXCHARCOD];
    }clienti[50];
    
    
    
    struct preventivo{
    int id;
    char data[MAXCHARCOD];
    char codicefiscale[MAXCHARCOD];
    int costo;
    char nomemobile[MAXCHARCOD];
    char tipologiamobile[MAXCHARCOD];
    
    
    
    }preventivi[50];
    int main()
    {
        mainmenu();
        return 0;
    }
    void mainmenu(){
        int azione;
        int numeropreventivi=0;
        int numeroclienti=0;
    
     do {
            printf("Gestione mobilificio \n\n");
            printf("1 - Inserisci nuovo preventivo\n");
            printf("2 - visualizzazione preventivi\n");
            printf("3 - Visualizzazione clienti\n");
            printf("0 - Esci\n");
            printf("Inserisci la scelta -> ");
            scanf("%d", &azione);
            fflush(stdin);
    
            //Controllo scelta
            switch (azione) {
                case 0:
                    printf("Arrivederci!");
                    break;
                case 1:
                    system("cls");
                    inseriscipreventivo(&numeroclienti,&numeropreventivi);
                    break;
    
                case 2:
                    system("cls");
                    visualizzapreventivi(numeropreventivi);
                    break;
                case 3:
                    system("cls");
                    visualizzazioneclienti(numeroclienti);
                    break;
                default:
                    printf("Azione non valida");
            }
        } while (azione != 0);
    }
    
    
    
    void inseriscipreventivo(int *numeroclienti,int *numeropreventivi){
        char cf[MAXCHARCOD];
        int check;
        char azione;
        int i;
    
    
    
    fflush(stdin);
    
    printf("Inserisci preventivo\n\n");
        do {
    
            printf("Codice fiscale (%d caratteri) -> ", MAXCHARCOD);
            gets(cf);
    
            //Controllo del codiceprodotto se gi? ? stato inserito
            check = controllacodfiscale(cf, *numeroclienti);
            if (check == 1) {
                printf("Codice Fiscale  gia' presente!\n\n");
    
                for(i=0;i<*numeroclienti;i++){
                if(strcmp(cf, clienti[i].codfiscale)==0){
                printf("%s,%s,%s",clienti[i].codfiscale,clienti[i].cognome,clienti[i].nome);
    
    
                    printf("\nConfermi i dati? Y o N");
    
                    scanf("%c",&azione);
                    fflush(stdin);
    
                     if(azione=='y' || azione=='Y'){
    
    
                        preventivi[*numeropreventivi].id=*numeropreventivi;
                        printf("numero preventivo %d",preventivi[*numeropreventivi].id);
                        fflush(stdin);
                        printf("inserisci data  (max %d caratteri)",MAXCHARCOD);
                        gets(preventivi[*numeropreventivi].data);
                        printf("inserisci codicefiscale cliente  (max %d caratteri)",MAXCHARCOD);
                        gets(preventivi[*numeropreventivi].codicefiscale);
                        printf("inserisci nome mobile  (max %d caratteri)",MAXCHARCOD);
                        gets(preventivi[*numeropreventivi].nomemobile);
                        printf("inserisci tipologia mobile  (max %d caratteri)",MAXCHARCOD);
                        gets(preventivi[*numeropreventivi].tipologiamobile);
                        printf("inserisci costo mobile");
                        scanf("%d",&preventivi[*numeropreventivi].costo);
                        printf("preventivo inserito correttamente!");
                        *numeropreventivi+=1;
    
                int main(void){
                char h;
                int exit_status=0;
                do{
    
                }while(toupper(h)!=EXIT_CHAR);
    
                getchar();
                return exit_status;
    
                }
    
    
    
                }else if(azione=='n' || azione=='N'){
    
                printf("\nNon hai confermato i dati\n\n");
                int main(void){
                char h;
                int exit_status=0;
                do{
    
                }while(toupper(h)!=EXIT_CHAR);
    
                getchar();
                return exit_status;
    
                }
    
    
    
    
                }else{
    
                printf("carattere non ammesso");
                system("PAUSE");
                system("cls");
    
                }
    
                }
    
    
                }
    
    
    
            }
    
    
        } while (check == 1);
    
            //fflush(stdin);
    
            printf("il cliente non e' presente in elenco.continuare? Y o N -> ");
            scanf("%c",&azione);
            fflush(stdin);
            if(azione=='y' || azione=='Y'){
    
    
    
            strcpy(clienti[*numeroclienti].codfiscale,cf);
            fflush(stdin);
            printf("inserisci nome cliente  (max %d caratteri)",MAXCHARCOD);
            gets(clienti[*numeroclienti].nome);
            printf("inserisci cognome cliente  (max %d caratteri)",MAXCHARCOD);
            gets(clienti[*numeroclienti].cognome);
            printf("inserisci indirizzo cliente  (max %d caratteri)",MAXCHARCOD);
            gets(clienti[*numeroclienti].indirizzo);
    
            preventivi[*numeropreventivi].id=*numeropreventivi;
            printf("numero preventivo %d",preventivi[*numeropreventivi].id);
            printf("inserisci data  (max %d caratteri)",MAXCHARCOD);
            gets(preventivi[*numeropreventivi].data);
            printf("inserisci codicefiscale cliente  (max %d caratteri)",MAXCHARCOD);
            gets(preventivi[*numeropreventivi].codicefiscale);
            printf("inserisci nome mobile  (max %d caratteri)",MAXCHARCOD);
            gets(preventivi[*numeropreventivi].nomemobile);
            printf("inserisci tipologia mobile  (max %d caratteri)",MAXCHARCOD);
            gets(preventivi[*numeropreventivi].tipologiamobile);
            printf("inserisci costo mobile");
            scanf("%d",&preventivi[*numeropreventivi].costo);
    
    
             printf("preventivo inserito correttamente!");
             *numeropreventivi+=1;
             *numeroclienti+=1;
    
             system("PAUSE");
             system("cls");
    
    
    
    
    
    
    
        } else if (azione == 'n' || azione == 'N') {
            printf("\nPreventivo non associato!!\n\n");
    
            system("PAUSE");
            system("cls");
        } else {
            printf("ERRORE! Carattere non ammesso");
    
            system("PAUSE");
            system("cls");
        }
    
    
    }
    
    int controllacodfiscale(char cf[MAXCHARCOD],int numeroclienti){
    
    
    int i;
    
        for (i = 0; i < numeroclienti; i++) {
            // se ? verificata l'uguaglianza -> codiceprodotto gi? esistente
            if (strcmp(cf, clienti[i].codfiscale) == 0) {
                return 1;
            }
        }
        //codiceprodotto non presente
        return 0;
    
    }
    void visualizzazioneclienti(int numeroclienti){
    
    int i;
    for(i=0;i<numeroclienti;i++){
    
        printf("%s,%s,%s",clienti[i].codfiscale,clienti[i].cognome,clienti[i].nome);
    }
            printf("\n");
            system("PAUSE");
            system("cls");
    }
    
    void visualizzapreventivi(int numeropreventivi){
    char cf[MAXCHARCOD];
    int i;
    fflush(stdin);
    printf("inserisci codice fiscale cliente (%d caratteri max) -> ",MAXCHARCOD);
    gets(cf);
    
    for(i=0;i<numeropreventivi;i++){
    
        if(strcmp(cf,preventivi[i].codicefiscale)==0){
            printf("%d,%s,%s,%s,%s,%d,%d",preventivi[i].id,preventivi[i].data,preventivi[i].codicefiscale,preventivi[i].nomemobile,preventivi[i].tipologiamobile,preventivi[i].costo,calcolosconto(numeropreventivi));
        }
    
            printf("\n");
            system("PAUSE");
            system("cls");
    }
    
    
    
    
    
    }
    
    int calcolosconto(int numeropreventivi){
    int i;
    int sconto;
    for(i=0;i<numeropreventivi;i++){
    
    sconto=preventivi[i].costo-50;
    
    }
    return sconto;
    
    
    
    }
    
  • Questo codice non è compilabile, ci sono errori ... il main inizia quando ancora non è finita la funzione precedente.
  • Dove dovrei mettere il main per uscire?
  • Per uscire? Che vuol dire?

    Ti ho detto che il programma è scritto in maniera sbagliata e non è compilabile.
    Se non fornisci un codice compilabile, come si fa a vedere come viene eseguito?


    Guarda che il tempo e la pazienza non sono infiniti ...
  • Hai ragione ma io non sto ancora ai tuoi livelli ......
  • Non riesco a tornare al menu principale....sempre quello è il problema
  • Non è questione di livelli. Non hai capito.

    Tu devi postare un codice che copio e compilo senza problemi e poi eseguo per capire.

    Ma se il tuo codice non è neanche compilabile perché tu non sai postarlo o non ne hai ancora scritto uno senza errori di compilazione, io non posso neanche provarlo.

    Quindi è perfettamente inutile che continui a ripetere che "non riesci a tornare al menu" se non fornisci un codice che possa essere provato.
  • E se mi postassi tu il codice che funziona?
    dato che a te funziona....
Devi accedere o registrarti per scrivere nel forum
67 risposte