Errore esercizio

di il
24 risposte

Errore esercizio

Salve ragazzi, è giusto come importo i punti dalla funzione contapunti alla funzione saldopunti?
grazie
int contapunti(int importo_nuovoacquisto) {
    //Variabili

    int i;
    int punti;

    punti = importo_nuovoacquisto * 5 / 100;

    return punti;

}

int saldopunti(int importo_nuovoacquisto) {
    //Variabili

    int i;
    int saldo;
    int punti;
    punti=contapunti(importo_nuovoacquisto);



    saldo =saldo+punti;


    return saldo;
}
ps:l'importo dell'acquisto lo prendo da tastiera con lo scanf e lo assegno a importo_nuovoacquisto

24 Risposte

  • Re: Errore esercizio

    Che intendi per giusto?
  • Re: Errore esercizio

    Se è giusto, se ho fatto bene....
  • Re: Errore esercizio

    No che non è giusto dato che il valore del saldo precedente non è valido
  • Re: Errore esercizio

    Così, la prima volta mi da il saldo che combaciano con i punti....poi non viene incrementata la variabile saldo infatti mi da
    Lo stesso valore dei punti...perché?
  • Re: Errore esercizio

    Te l'ho appena spiegato e te l'avevo già detto in altro thread.

    Il valore del saldo precedente non è conosciuto dalla funzione.
    In altra occasione ti avevo invitato a studiare come si lavora con le variabili locali in c.
  • Re: Errore esercizio

    Infatti solo il saldo attuale conosce....quello precedente no
  • Re: Errore esercizio

    E quindi devi darglielo tu !
  • Re: Errore esercizio

    Quindi il saldo precedente in una variabile devo metterlo giusto?
  • Re: Errore esercizio

    Se vuoi che si aggiorni non deve essere una variabile locale della funzione ma un argomento passato alla funzione.
  • Re: Errore esercizio

    Nonostante ho messo saldo come argomento della funzione saldopunti non va...
  • Re: Errore esercizio

    Ovviamente hai eliminato la variabile della funzione, giusto?

    E quando qualcosa non va mostra sempre il nuovo codice ...
  • Re: Errore esercizio

    int contapunti(int importo_nuovoacquisto) {
        //Variabili
    
        int i;
        int punti;
    
        punti = importo_nuovoacquisto * 5 / 100;
    
        return punti;
    
    }
    
    int saldopunti(int importo_nuovoacquisto,int saldo) {
        //Variabili
    
        int i;
    //    int saldo;
        int punti;
        punti=contapunti(importo_nuovoacquisto);
    
    
    
        saldo =saldo+punti;
    
    
        return saldo;
    }
  • Re: Errore esercizio

    Va bene .... ovviamente la devi chiamare in modo corretto ...

    Nel main avrai

    int saldo=0:

    inizialmente e quando vorrai aggiornare il saldo

    saldo = saldopunti(... , saldo);
  • Re: Errore esercizio

    Ti mostro tutto il codice che è meglio....

    #include <stdio.h>
    #include <stdlib.h>
    #define MAXCHAR 10
    void mainmenu();
    void creazionefidelitycard(int *numerofidelitycards);
    void nuovoacquisto(int numerofidelitycard);
    int contapunti(int importo_nuovoacquisto);
    int saldopunti(int importo_nuovoacquisto,int saldo);
    void utilizzopunti(int importo_nuovoacquisto, int numerofidelitycards);
    void visualizzazionefidelitycards(int numerofidelitycards);
    //void visualizzazioneestrattopunti(int numerofidelitycards);
    
    struct fidelity_card {
        int id;
        char nome[MAXCHAR];
        char cognome[MAXCHAR];
        int data_nascita;
    } fidelitycards[10];
    
    struct acquisto {
        char data_acquisto[MAXCHAR];
        int importo_nuovoacquisto;
    
    } acquisti[10];
    
    int main() {
        mainmenu();
        return 0;
    }
    
    void mainmenu() {
        int numerofidelitycards = 1;
        int numeroacquisti;
        int azione;
        do {
            printf("Gestione fidelity card \n\n");
            printf("1 - Creazione di una nuova fidelity card\n");
            printf("2 - Nuovo acquisto\n");
            printf("3 - Utilizzo punti\n");
            printf("4 - Visualizza Fidelity card\n");
            printf("5 - Visualizzazione estratto punti\n");
            printf("0 - Esci\n");
            printf("Inserisci la scelta -> ");
            scanf("%d", &azione);
    
            //Controllo scelta
            switch (azione) {
                case 0:
                    printf("Arrivederci!");
                    break;
                case 1:
                    system("cls");
                    creazionefidelitycard(&numerofidelitycards);
                    break;
                case 2:
                    system("cls");
                    nuovoacquisto(numerofidelitycards);
                    break;
               /* case 3:
                    system("cls");
                    utilizzopunti(importo_nuovoacquisto, numerofidelitycards);
                    break;
                case 4:
                    system("cls");
                    visualizzazionefidelitycards(numerofidelitycards);
                    break;
                    case 5:
                        system("cls");
                        visualizzazioneestrattopunti(numerofidelitycards);
                        break;*/
                default:
                    printf("Azione non valida");
            }
        } while (azione != 0);
    
    
    
    }
    
    void creazionefidelitycard(int *numerofidelitycards) {
    
        //int *numerofidelitycards=1;
        fflush(stdin);
    
        printf("crea nuova fidelity card\n");
        fidelitycards[*numerofidelitycards].id = *numerofidelitycards;
        printf("inserisci cognome max %d caratteri \n", MAXCHAR);
        gets(fidelitycards[*numerofidelitycards].cognome);
        printf("inserisci nome max %d caratteri \n", MAXCHAR);
        gets(fidelitycards[*numerofidelitycards].nome);
        printf("inserisci data di nascita");
        scanf("%d", &fidelitycards[*numerofidelitycards].data_nascita);
    
    
    
        printf("\nFidelity card creata correttamente!!\n\n");
        printf("CODICE FIDELITY CARD NUMERO %d \n", fidelitycards[*numerofidelitycards].id);
    
    
        *numerofidelitycards += 1;
        system("PAUSE");
        system("cls");
    
    
    }
    
    void nuovoacquisto(int numerofidelitycards) {
        int id;
        int i;
        char azione;
        char data_acquisto[MAXCHAR];
        int importo_nuovoacquisto;
        int punti;
        int saldo=0;
        saldo=saldopunti(importo_nuovoacquisto,saldo);
    
    
    
        printf("inserire codice fidelity card ");
    
        scanf("%d", &id);
    
    
    
    
        for (i = 1; i < numerofidelitycards; i++) {
            if (fidelitycards[i].id == id) {
                printf("%s\t%s\t%d", fidelitycards[i].cognome, fidelitycards[i].nome, fidelitycards[i].data_nascita);
            }
        }
        fflush(stdin);
    
        printf("Confermare i dati?. Procedere? Y/N -> ");
        scanf("%c", &azione);
    
        if (azione == 'y' || azione == 'Y') {
           // fflush(stdin);
            printf("inserisci data nuovo acquisto\n");
           // gets(acquisti[*numeroacquisti].data_acquisto);
           // fflush(stdin);
            //printf("inserisci importo nuovo acquisto\n");
            //scanf("%d", &acquisti[*numeroacquisti].importo_nuovoacquisto);
            gets(data_acquisto);
            fflush(stdin);
            printf("inserisci importo nuovo acquisto\n");
            scanf("%d", &importo_nuovoacquisto);
    
    
    
            printf("i nuovi punti fedelta' sono %d mentre il saldo è %d  ",contapunti(importo_nuovoacquisto),saldopunti(importo_nuovoacquisto,saldo));
    
            //*numeroacquisti+=1;
            system("PAUSE");
            system("cls");
        } else if (azione == 'n' || azione == 'N') {
    
            printf("\nNon hai confermato i dati\n\n");
    
            system("PAUSE");
            system("cls");
    
    
    
    
    
        } else {
    
            printf("carattere non ammesso");
            system("PAUSE");
            system("cls");
    
        }
    
    
    }
    
    
    int contapunti(int importo_nuovoacquisto) {
        //Variabili
    
        int i;
        int punti;
    
        punti = importo_nuovoacquisto * 5 / 100;
    
        return punti;
    
    }
    
    int saldopunti(int importo_nuovoacquisto,int saldo) {
        //Variabili
    
        int i;
    //    int saldo;
        int punti;
        punti=contapunti(importo_nuovoacquisto);
    
    
    
        saldo =saldo+punti;
    
    
        return saldo;
    }
    
    void visualizzazionefidelitycards(int numerofidelitycards) {
    
        int i;
        for (i = 1; i < numerofidelitycards; i++) {
    
            printf("codice : %d,cognome cliente:%s,saldo punti:%d", fidelitycards[i].id, fidelitycards[i].cognome);
    
    
    
        }
    
        system("PAUSE");
        system("cls");
    
    }
    
    
    
    
Devi accedere o registrarti per scrivere nel forum
24 risposte