Puntatori e strutture

di il
2 risposte

Puntatori e strutture

Salve a tutti, sono nuovo del forum. Ho un problema con un esercizio la cui traccia recita così;
Sviluppare un programma in C++ che usi una struttura per raccogliere informazioni sui pazienti di un ospedale: nome, indirizzo, data di nascita, genere, giorno di ingresso, giorno di uscita e problema fisico. Il programma deve avere una funzione per immettere i dati, raccoglierli in un array e visualizzare in output i pazienti ricoverati in un dato giorno. Quello che posto è il codice che ho scritto; ho fatto una struttura data ed una paziente. Il problema sta nel fatto che quando digito il giorno di entrata il programma non mi vsualizza l'elenco di tutti i pazienti ricoverati quel giorno ma termina. Perchè? L'if è sbagliato? Grazie per un eventuale aiuto! Posto il codice:

using namespace std;

struct data
{
       unsigned int giorno;
       unsigned int mese;
       unsigned int anno;
};

struct paziente
{
       char nome[20];
       char indirizzo[30];
       data data_nascita;
       char genere;
       data data_entrata;
       data data_uscita;
       char problema[20];
};

void inserisci (paziente *ptr);
void ricerca (paziente *ptr, unsigned int);

int main ()
{
    int num; 
    unsigned int giorno;
    cout << "Quanti pazienti vuoi inserire nel database? ";
    cin >> num;
    paziente num_pazienti[num];
    paziente *p;
    p=num_pazienti;
    for (int i=0; i<num; i++, p++)
    {
    cout << endl;
    inserisci(p);
    }
    
    cout << "Inserire il giorno di ricovero: ";
    cin >> giorno;
    
    for (int i=0; i<num; i++, p++)
    ricerca (p,giorno);

    system ("PAUSE");
    return 0;
}

void inserisci (paziente *ptr)
{
     cout << "Nome paziente: "; 
     cin >> (ptr->nome);
     while(cin.get() != '\n');
     cout << "Indirizzo: "; 
     cin >> (ptr->indirizzo);
     while(cin.get() != '\n');
     cout << "Data di nascita: "; 
     cin >> ptr->data_nascita.giorno
          >> ptr->data_nascita.mese
          >> ptr->data_nascita.anno;
     cout << "Genere: ";
     cin >> ptr->genere;
     cout << "Data di entrata: ";
     cin >> ptr->data_entrata.giorno
          >> ptr->data_entrata.mese
          >> ptr->data_entrata.anno;
     cout << "Data di uscita: ";
     cin >> ptr->data_uscita.giorno
          >> ptr->data_uscita.mese
          >> ptr->data_uscita.anno;
     cout << "Problema fisico: ";
     cin >> (ptr->problema);
     while(cin.get() != '\n');
}

void ricerca (paziente *ptr, unsigned int giorno)
{
     if (giorno == ptr->data_entrata.giorno)
     cout << "Nome paziente: " << ptr->nome << endl;
}

2 Risposte

  • Re: Puntatori e strutture

    
    for (int i=0; i<num; i++, p++)
        {
        cout << endl;
        inserisci(p);
        }
       
        cout << "Inserire il giorno di ricovero: ";
        cin >> giorno;
       
        for (int i=0; i<num; i++, p++)
        ricerca (p,giorno);
    
    dopo l'inserimento dove punta p?
  • Re: Puntatori e strutture

    Hai ragione skynet. Mettendo p = &numpazienti[0] funziona. Bisognava farlo puntare di nuovo all'inizio dell'array. Grazie.
Devi accedere o registrarti per scrivere nel forum
2 risposte