Struct e passaggi in funzioni

di il
3 risposte

Struct e passaggi in funzioni

Buongiorno a tutti,
sto avendo problemi di funzionamento nella funzione "void verifica_id_viaggio".
Questa funzione viene chiamata in "void inserimento_prenotazione" che ha lo scopo di avvalorare una struct. La funzione "void verifica_id_viaggio" deve verificare che l'ID prelevato nella funzione "void inserimento_prenotazione" esista in tutte le struct caricate dall'utente.

Il problema è che la verifica non riesce nè con un ID esistente nè inesistente.

Pubblico l'intero codice.
Chi mi può aiutare? Sto tribolando da 3 giorni su questa cosa


#include<stdlib.h>
#include<stdio.h>
#include<string.h>

#define SIZE 50

//Tabella VIAGGI
typedef struct
{
    char id[SIZE];
    char dest[SIZE];
    int cat;
    float prezzo;
    int posti_disp;
    int posti_occ;
} viaggi;

//Tabella PRENOTAZIONI
typedef struct
{
    char id[SIZE];
    char id_viaggio[SIZE];
    int posti;
} prenotazioni;

void inserimento_viaggio(int numviaggi);
void inserimento_prenotazione(int numprenotazioni, int numviaggi);
void inserimento_categoria(int n);
void verifica_id_viaggio(char ver_viaggio[SIZE], int numviaggi);
void stampa_dati(int numviaggi);

int main()
{
    int num_viaggi;
    int num_prenotazioni;

    puts("Inserire il numero di VIAGGI da caricare in tabella");
    scanf("%d", &num_viaggi);       
    inserimento_viaggio(num_viaggi);
    stampa_dati(num_viaggi);

    puts("\nInserire il numero di PRENOTAZIONI da caricare in tabella");
    scanf("%d", &num_prenotazioni);       

//    stampa_dati(num_viaggi);

    inserimento_prenotazione(num_prenotazioni, num_viaggi);
}

void inserimento_viaggio(int numviaggi)
{
    viaggi viaggio[SIZE];          
    int i=0;
    puts("++++++ INSERIMENTO VIAGGI ++++++");
//    printf("DIAGNOSTICA num_viaggi %d\n", numviaggi);
    for(i=0; i<numviaggi; i++)
    {
//        puts("DIAGNOSTICA SEI IN FOR\n");

        puts("\ninserire ID viaggio");
        scanf("%s", viaggio[i].id);
//        printf("ID VIAGGIO: %s\n", viaggio[i].id);

        puts("\ninserire destinazione");
        scanf("%s", viaggio[i].dest);
//        printf("DESTINAZIONE: %s\n", viaggio[i].dest);

        inserimento_categoria(i);

        puts("\ninserire prezzo a persona");
        scanf("%f", &viaggio[i].prezzo);
//        printf("PREZZO A PERSONA: %.2f\n", viaggio[i].prezzo);

        puts("\ninserire posti DISPONIBILI");
        scanf("%d", &viaggio[i].posti_disp);
//        printf("POSTI DISPONIBILI: %d\n", viaggio[i].posti_disp);

        puts("\ninserire posti OCCUPATI");
        scanf("%d", &viaggio[i].posti_occ);
//        printf("POSTI OCCUPATI: %d\n", viaggio[i].posti_occ);
    }
    puts("++++++ INSERIMENTO VIAGGI CONCLUSO ++++++\n\n");
}

void inserimento_categoria(int i)
{
    viaggi viaggio[SIZE];

//    puts("DIAGNOSTICA SEI IN INSERIMENTO CATEGORIA");
//    printf("DIAGNOSTICA INDICE FOR %d\n", i);

    puts("\ninserire il numero relativo alla categoria");
    do
    {
        puts("1. Giovani\n2. Romantico\n3. Culturale\n4. Religioso");
        scanf("%d", &viaggio[i].cat);
//        printf("DIAGNOSTICA: CATEGORIA INSERITA: %d\n", viaggio[i].cat);
    }
    while(viaggio[i].cat<1 || viaggio[i].cat>4);
}

void inserimento_prenotazione(int numprenotazioni, int numviaggi) //DEVI INSERIRE VERIFICA ESISTENZA
{
    prenotazioni prenotazione[SIZE];
    viaggi viaggio[SIZE];
    int i=0;
    char ver_id_viaggio[SIZE];

                        stampa_dati(numviaggi);
    puts("\n++++++ INSERIMENTO PRENOTAZIONI ++++++");
    printf("DIAGNOSTICA numprenotazioni %d\n", numprenotazioni);
    printf("DIAGNOSTICA numviaggi %d\n", numviaggi);
    for(i=0; i<numprenotazioni; i++)
    {
//        puts("DIAGNOSTICA SEI IN FOR\n");

        puts("\ninserire ID prenotazione");
        scanf("%s", prenotazione[i].id);
        printf("ID PRENOTAZIONE: %s\n", prenotazione[i].id);

        puts("\ninserire ID del viaggio da prenotare");
        scanf("%s", ver_id_viaggio);
        printf("ID VIAGGIO DA PRENOTARE: %s\n", ver_id_viaggio);

        ////////////////////////////////////////////////
        verifica_id_viaggio(ver_id_viaggio, numviaggi);          //   VERIFICA ESISTENZA DEL VIAGGIO CERCANDO L'ID

        ////////////////////////////////////////////////

        puts("\ninserire posti da prenotare");
        scanf("%d", &prenotazione[i].posti);
        printf("POSTI PRENOTATI: %d\n", prenotazione[i].posti);
    }
    puts("\n++++++ INSERIMENTO PRENOTAZIONI CONCLUSO ++++++");
}

void verifica_id_viaggio(char ver_viaggio[SIZE], int numviaggi)
{
    viaggi viaggio[SIZE];
    printf("\nDIAGNOSTICA id del viaggio richiesto in F prenotazione %s\n", ver_viaggio);
    printf("DIAGNOSTICA numero di cicli del for per la ricerca dei viaggi %d\n", numviaggi);
                        stampa_dati(numviaggi);
    int i=0;
    for(i=0; i<numviaggi; i++)
    {
        if(strcmp(ver_viaggio, viaggio[i].id)==0)
        {
            puts("Identificativo viaggio VALIDO");
            strcpy(ver_viaggio, viaggio[i].id);
            printf("DIAGNOSTICA id viaggio verificato: -->%s\n", viaggio[i].id);
        }
        else
        {
            puts("ERRORE VIAGGIO NON TROVATO");
        }
    }
}

void stampa_dati(int numviaggi)
{
    viaggi viaggio[SIZE];
    puts("\n>>>>>>>>>>>>>>>>>>>DIAGNOSTICA STAMPA TABELLA VIAGGIO<<<<<<<<<<<<<<<<<<<<");
    int i=0;
    for(i=0; i<numviaggi; i++)
    {
        printf("ID VIAGGIO: %s\n", viaggio[i].id);
        printf("DESTINAZIONE: %s\n", viaggio[i].dest);
        printf("PREZZO A PERSONA: %.2f\n", viaggio[i].prezzo);
        printf("POSTI DISPONIBILI: %d\n", viaggio[i].posti_disp);
        printf("POSTI OCCUPATI: %d\n", viaggio[i].posti_occ);
    }
}

3 Risposte

  • Re: Struct e passaggi in funzioni

    Cancella le parolacce dal codice
    E poi esattamente come fa il tuo programma a memorizzare i dati? Non dovresti avere un array globale per viaggi e prenotazioni oppure un array locale nel main con delle funzioni che interagiscono con quell'array per riferimento?
  • Re: Struct e passaggi in funzioni

    Scusate le parolaccie, erano rivolte a me comunque.

    A ogni modo grazie per la risposta, ora provo
  • Re: Struct e passaggi in funzioni

    Se usi un array

    viaggi viaggio[SIZE];

    in ogni funzione, è ovvio che non ti funzionerà mai.

    Questi sono visibili solo nelle funzioni e sono diversi l'uno dall'altro. Conosci il concetto di visibilità delle variabili?
Devi accedere o registrarti per scrivere nel forum
3 risposte