Problema con una funzione c

di il
6 risposte

Problema con una funzione c

Non capisco perche la funzione visualizzazione fedelitycards non mi stampa il saldopunti.....
#include <stdio.h>
#include <stdlib.h>
#define MAXCHAR 10
void mainmenu();
void creazionefidelitycard(int *numerofidelitycards);
void nuovoacquisto(int numerofidelitycards);
int contapunti (int importo_nuovoacquisto,int numerofidelitycards);
int saldopunti(int importo_nuovoacquisto,int numerofidelitycards);
void utilizzopunti(int importo_nuovoacquisto,int numerofidelitycards);
void visualizzazionefidelitycards(int importo_nuovoacquisto,int numerofidelitycards);
//void visualizzazioneestrattopunti(int numerofidelitycards);



struct fidelity_card{
int id;
char nome[MAXCHAR];
char cognome[MAXCHAR];
int data_nascita;
}fidelitycards[10];





int main()
{
    mainmenu();
    return 0;
}

void mainmenu(){
int numerofidelitycards=1;
int importo_nuovoacquisto;
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(importo_nuovoacquisto,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_nuovo_acquisto[MAXCHAR];
    int importo_nuovoacquisto;

                      // fflush(stdin);



           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(data_nuovo_acquisto);
                fflush(stdin);
               printf("inserisci importo nuovo acquisto\n");
               scanf("%d",&importo_nuovoacquisto);

               printf("i nuovi punti fedelta' sono %d mentre il saldo punti e' %d ",contapunti(importo_nuovoacquisto,numerofidelitycards),saldopunti(importo_nuovoacquisto,numerofidelitycards));


                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");

            }


            }


void utilizzopunti(int importo_nuovoacquisto,int numerofidelitycards){
    int id;
    int i;
    char azione;
    int punti;
    punti=contapunti(importo_nuovoacquisto,numerofidelitycards);
    int saldo;
   // saldo=saldopunti(importo_nuovoacquisto,numerofidelitycards);

printf("inserisci codice della fidelitycard");
scanf("%d",&id);
for(i=1;i<numerofidelitycards;i++){

    if(fidelitycards[i].id==id){
        printf("nome:%s,cognome:%s,data di nascita:%d",fidelitycards[i].nome,fidelitycards[i].cognome,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 i punti che intendi utilizzare\n");
              //  scanf("%d",&punti);
              //  saldo=saldo-punti;


               printf("il nuovo saldo punti e' %d ",saldo);


                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,int numerofidelitycards) {
    //Variabili

    int i;
    int punti;



    for(i = 1; i< numerofidelitycards; i++) {

            punti= importo_nuovoacquisto*5/100;


    }
    return punti;

}

int saldopunti (int importo_nuovoacquisto,int numerofidelitycards) {
    //Variabili
    int punti;
    punti=contapunti(importo_nuovoacquisto,numerofidelitycards);
    int i;
    int saldo=0;


    saldo= saldo+punti;


    return saldo;
}

void visualizzazionefidelitycards(int importo_nuovoacquisto,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,saldopunti(importo_nuovoacquisto,numerofidelitycards));



}

    system("PAUSE");
    system("cls");

}

/*void visualizzazioneestrattopunti(int numerofidelitycards){
int id;
int i;
char data_nuovo_acquisto[MAXCHAR];
int importo_nuovoacquisto;

printf("inserisci id fidelitycards");
scanf("%d",&id);
for(i=1;i<numerofidelitycards;i++){
if(fidelitycards[i].id==id){


    printf("%s,%d,%d",data_nuovo_acquisto,importo_nuovoacquisto,contapunti(importo_nuovoacquisto,numerofidelitycards));
}
}

}*/

6 Risposte

  • Re: Problema con una funzione c

    Non stampa o stampa un valore sbagliato? Cosa stampa? Quali dati inserisci? Quali dati ti aspetti?

    NON usare immagini ...
  • Re: Problema con una funzione c

    Stampa l'indirizzo in memoria della variabile ovvero un numero un po lungo...mentre mi aspetto il saldo dei punti tant'è che nella printf ho richiamato la funzione saldopunti
  • Re: Problema con una funzione c

    Non sono indirizzi di memoria solo perché sono numeri grandi. Le variabili non inizializzate possono contenere numeri grandi o anche dei calcoli sbagliati possono dare risultati molto grandi.

    Il tuo codice purtroppo è molto, molto confuso. Non si capiscono i criteri che usi.
  • Re: Problema con una funzione c

    Se provi a compilare e a eseguirlo il codice noti anche tu che saldopunti non va in visualizzazione fidelitycards
  • Re: Problema con una funzione c

    È la traccia dell'esercizio che mi chiede di fare ciò.....
  • Re: Problema con una funzione c

    No ... mi sa che la traccia chiede qualcosa che tu non hai implementato correttamente nel codice.
Devi accedere o registrarti per scrivere nel forum
6 risposte