Programma c....aiuto

di il
58 risposte

Programma c....aiuto


#include <stdlib.h>
#include <stdio.h>
#define MAXCHAR 10
void mainmenu();
void creazionefidelitycard(int *numerofidelitycards);
void nuovoacquisto(int numerofidelitycards);
int contapunti (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 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");

            break;
        case 4:
            system("cls");

            break;
        case 5:
            system("cls");

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

               printf("i nuovi punti fedelta' sono %d ",contapunti(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");

            }


            }








int contapunti (int numerofidelitycards) {
    //Variabili

    int i;
    int punti;
    int importo_nuovoacquisto;

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

            punti= importo_nuovoacquisto*5/100;

    }
    return punti;
}


quando richiamo la funzione contapunti che deve stampare i punti, non mi da i punti ma l'indirizzo in memoria della variabile e quindi un numero lungo.......

58 Risposte

  • Re: Programma c....aiuto

    Allora controlla quella funzione ...

    Io vedo che usi la variabile

    importo_nuovoacquisto

    in un calcolo ma questa variabile non ha un valore.
  • Re: Programma c....aiuto

    Con lo scanf io passo il valore a importo_nuovoacquisto, poi questa variabile la passo alla funziona contenuti la quale fa importo_nuovoacquisto*5/100 la quale poi dovrebbe ritornare un int ovvero i punti...però quando vado a richiamare nella printf la funzione contapunti mi stampa un numero esagerato ovvero la posizione in memoria della variabile e no i punti
  • Re: Programma c....aiuto

    Ma leggi quello che scrivo?

    Intanto la funzione non si chiama "contenuti" (come scrivi tu) ma "contapunti"

    E quella variabile, la importo_nuovoacquisto che utilizzi nel calcolo, non ha un valore e non viene affatto passata.

    Rileggi con attenzione il codice della funzione contapunti
  • Re: Programma c....aiuto

    È la tastiera del mac che corregge a cavolo.......comunque io con lo scanf assegno un numero alla variabile importo_nuovoacquisto e poi quest importo come lo faccio a importare nella funziona contapunti?
  • Re: Programma c....aiuto

    Ho risolto
  • Re: Programma c....aiuto

    Come hai risolto?
  • Re: Programma c....aiuto

    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;
    }
  • Re: Programma c....aiuto

    Ora va bene per la variabile, ma il ciclo non ha senso ... perché fai tante volte lo stesso calcolo?
  • Re: Programma c....aiuto

    È la traccia che chiede ciò
  • Re: Programma c....aiuto

    No ... non ha senso ...
  • Re: Programma c....aiuto

    Per il saldo punti va bene così?
    int saldopunti (int punti,int numerofidelitycards) {
        //Variabili
    
        int i;
        int saldo;
      //  int punti;
    
        for(i = 1; i<= numerofidelitycards; i++) {
    
                saldo= saldo+punti;
    
        }
        return saldo;
    }
  • Re: Programma c....aiuto

    Però poi per stampare il saldopunti ho questo errore e non capisco il perché.....
      printf("i nuovi punti fedelta' sono %d mentre il saldo punti è %d ",saldopunti(punti,numerofidelitycards),contapunti(importo_nuovoacquisto,numerofidelitycards));
    dice l'IDE:assegnare valore di ritorno alla nuova variabile...ma io ho fatto return saldo
  • Re: Programma c....aiuto

    Quest'errore .... quale errore??
  • Re: Programma c....aiuto

    Nel printf del contapunti metto anche il saldopunti e in saldopunti ci passo i punti del contapunti....però l'IDE mi da:use of undeclared identifier punti...perchè?
Devi accedere o registrarti per scrivere nel forum
58 risposte