Problemi con passaggio valori tra funzioni

di il
7 risposte

Problemi con passaggio valori tra funzioni

Buona sera a tutti, come dal titolo ho un problema per quanto riguarda il passaggio di valori
#include <iostream>
#include <cstring>

using namespace std;

struct orario
{
	int anno;
	short int mese;
	short int giorno;
	short int ore;
	short int min;
};

struct appuntamento
{ 
	char titolo[50];
	char luogo[30];
	orario ora;
	appuntamento* succ;
};

typedef appuntamento* lista;

//Prototipi
void scelta_opzione(appuntamento& a);
void stampaLista(lista inizio);

// Questa funzione restituisce true solo se l'appuntamento passato al secondo 
// membro è programmato dopo quello puntato al primo membro
bool anteriore (lista a, appuntamento b)
{
	
}

// Questa procedura inserisce in agenda l'appuntamento passato al secondo membro
// in maniera ordinata rispetto alla data ed all'orario in cui è programmato
void inserisci_ordinatamente(lista& inizio, appuntamento e) 
{
	
}

// Questa procedura elimina dall'agenda gli appuntamenti scaduti alla data
// dell'appuntamento passatole al secondo membro 
void elimina_passati(lista& inizio, appuntamento oggi) 
{
	
}

// Questa funzione restituisce true solo se le stringhe contenute nei due
// vettori sono identiche
bool uguali(char stringa1[], char stringa2[])
{
	
}

// Questa funzione restituisce true solo se in agenda viene trovato un 
// appuntamento il cui titolo è identico a quello dell'appuntamento passatole a 
// secondo membro; in questo caso il secondo membro deve diventare una copia di 
// quello trovato e quest'ultimo deve essere eliminato dall'agenda
bool estrai_elem_dato(lista& inizio, appuntamento& e)
{
	
}



// Questa procedura riempie dall'input i campi dell'appuntamento
// passatole per riferimento
void leggidati(appuntamento& a) 
{
	lista inizio;
	char ausiliare[2]; //utlizzata per "assorbire" il carattere '/0'
	cin.getline(ausiliare,2);
	orario ora;
	cout << "Inserisci il titolo dell'appuntamento: "; cin.getline(a.titolo,60);
	cout << "Inserisci il luogo dell'appuntamento: "; cin.getline(a.luogo,30);
	cout << "Inserisci l'orario dell'appuntamento (ora, minuto): "; cin >> ora.ore >> ora.min;
	cout << "Inserisci il giorno, il mese e poi l'anno dell'appuntamento: "; cin >> ora.giorno >> ora.mese >> ora.anno ;
	scelta_opzione(a);
}

// Questa procedura stampa in output tutti gli appuntamenti
void stampaLista(lista inizio)
{
	appuntamento a;
	inizio = new appuntamento(a);
	orario* ora;
	cout << "Titolo: " << ((appuntamento *) inizio)->titolo << endl;
	cout << "Luogo: " << ((appuntamento *) inizio)->luogo << endl;
	cout << "Anno: " << ora->giorno << endl;
	cout << "Mese: " << ora->mese << endl;
	cout << "Giorno: " << ora->giorno << endl;
	cout << "Ora: " << ora->ore << endl;
	cout << "Minuti: " << ora->min << endl;
	scelta_opzione(a);
}

void scelta_opzione(appuntamento& a)
{
	lista inizio;
	appuntamento oggi;
	char scelta;
	cout << "Scegli un opzione:" << endl;
	cout << "i: inserire un nuovo appuntamento." << endl;
	cout << "e: per eliminare gli appuntamenti passati." << endl;
	cout << "a: per eliminare un particolare appuntamento" << endl;
	cout << "s: per stampare la lista degli appuntamenti" << endl;
	cin >> scelta;
	switch (scelta)
	{
		case 'i':
			leggidati(a);
			break;
		case 'e':
			elimina_passati(inizio, oggi);
			break;
		case 's':
			stampaLista(inizio);
			break;
	}
}

int main()
{	
	appuntamento a;
	scelta_opzione(a);
}
Dopo aver inserito i dati dell'appuntamento (Quindi scelgo di far partire la funzione "leggidati"), dopo decido di far stampare quei dati, solo che quando scelgo l'opzione di stampare i dati (stampaLista) mi escono simboli strani. Vi lascio in allegato uno screen di quelle che mi esce.
Allegati:
26264_7b644384a919b343775202f54065d6af.png
26264_7b644384a919b343775202f54065d6af.png

7 Risposte

  • Re: Problemi con passaggio valori tra funzioni

    Nella stampa utilizzi

    inizio

    che non è mai stata usata prima. Quindi, cosa ti aspetti ?
  • Re: Problemi con passaggio valori tra funzioni

    oregon ha scritto:


    Nella stampa utilizzi

    inizio

    che non è mai stata usata prima. Quindi, cosa ti aspetti ?
    Il problema è che l'esercizio chiede di implementare una funzione "stampaLista" con parametro "lista inizio"
  • Re: Problemi con passaggio valori tra funzioni

    Questo non è un problema. Il problema è che devi inizializzarla a NULL

    lista inizio = NULL;

    e soprattutto devi utilizzarla ANCHE nell'inserimento.
  • Re: Problemi con passaggio valori tra funzioni

    oregon ha scritto:


    Questo non è un problema. Il problema è che devi inizializzarla a NULL

    lista inizio = NULL;

    e soprattutto devi utilizzarla ANCHE nell'inserimento.
    Ho inizializzato "inizio" a null sia nell'inserimento che nella funzione stampa, ma il problema persista ancora. Lascio qui il codice
     #include <iostream>
    #include <cstring>
    
    using namespace std;
    
    struct orario
    {
    	int anno;
    	short int mese;
    	short int giorno;
    	short int ore;
    	short int min;
    };
    
    struct appuntamento
    { 
    	char titolo[50];
    	char luogo[30];
    	orario ora;
    	appuntamento* succ;
    };
    
    typedef appuntamento* lista;
    
    //Prototipi
    void scelta_opzione();
    
    
    // Questa funzione restituisce true solo se l'appuntamento passato al secondo 
    // membro è programmato dopo quello puntato al primo membro
    bool anteriore (lista a, appuntamento b)
    {
    	
    }
    
    // Questa procedura inserisce in agenda l'appuntamento passato al secondo membro
    // in maniera ordinata rispetto alla data ed all'orario in cui è programmato
    void inserisci_ordinatamente(lista& inizio, appuntamento e) 
    {
    	
    }
    
    // Questa procedura elimina dall'agenda gli appuntamenti scaduti alla data
    // dell'appuntamento passatole al secondo membro 
    void elimina_passati(lista& inizio, appuntamento oggi) 
    {
    	
    }
    
    // Questa funzione restituisce true solo se le stringhe contenute nei due
    // vettori sono identiche
    bool uguali(char stringa1[], char stringa2[])
    {
    	
    }
    
    // Questa funzione restituisce true solo se in agenda viene trovato un 
    // appuntamento il cui titolo è identico a quello dell'appuntamento passatole a 
    // secondo membro; in questo caso il secondo membro deve diventare una copia di 
    // quello trovato e quest'ultimo deve essere eliminato dall'agenda
    bool estrai_elem_dato(lista& inizio, appuntamento& e)
    {
    	
    }
    
    
    
    // Questa procedura riempie dall'input i campi dell'appuntamento
    // passatole per riferimento
    void leggidati(appuntamento& a) 
    {
    	lista inizio = NULL;
    	inizio = new appuntamento();
    	char ausiliare[2]; //utlizzata per "assorbire" il carattere '/0'
    	cin.getline(ausiliare,2);
    	orario ora;
    	cout << "Inserisci il titolo dell'appuntamento: "; cin.getline(((appuntamento *) inizio)->titolo,60);
    	cout << "Inserisci il luogo dell'appuntamento: "; cin.getline(((appuntamento *) inizio)->luogo,30);
    /*	cout << "Inserisci l'orario dell'appuntamento (ora, minuto): "; cin >> ora.ore >> ora.min;
    	cout << "Inserisci il giorno, il mese e poi l'anno dell'appuntamento: "; cin >> ora.giorno >> ora.mese >> ora.anno ;*/
    	scelta_opzione();
    }
    
    // Questa procedura stampa in output tutti gli appuntamenti
    void stampaLista(lista inizio)
    {
    	appuntamento a;
    	inizio = NULL;
    	inizio = new appuntamento();
    	orario* ora;
    	cout << "Titolo: " << ((appuntamento *) inizio)->titolo << endl;
    	cout << "Luogo: " << ((appuntamento *) inizio)->luogo << endl;
    /*	cout << "Anno: " << ora->giorno << endl;
    	cout << "Mese: " << ora->mese << endl;
    	cout << "Giorno: " << ora->giorno << endl;
    	cout << "Ora: " << ora->ore << endl;
    	cout << "Minuti: " << ora->min << endl;*/
    	scelta_opzione();
    }
    
    void scelta_opzione()
    {
    	lista inizio;
    	appuntamento oggi;
    	appuntamento a;
    	char scelta;
    	cout << "Scegli un opzione:" << endl;
    	cout << "i: inserire un nuovo appuntamento." << endl;
    	cout << "e: per eliminare gli appuntamenti passati." << endl;
    	cout << "a: per eliminare un particolare appuntamento" << endl;
    	cout << "s: per stampare la lista degli appuntamenti" << endl;
    	cin >> scelta;
    	switch (scelta)
    	{
    		case 'i':
    			leggidati(a);
    			break;
    		case 'e':
    			elimina_passati(inizio, oggi);
    			break;
    		case 's':
    			stampaLista(inizio);
    			break;
    	}
    }
    
    int main()
    {	
    	appuntamento a;
    	scelta_opzione();
    }
  • Re: Problemi con passaggio valori tra funzioni

    Nell'inserimento non utilizzi il puntatore inizio che usi in stampaInizio. Hai compreso che devi utilizzare lo stesso puntatore? Se ne utilizzi due diversi, sono due diversi puntatori.

    Hai chiaro il concetto di variabile locale del C?
  • Re: Problemi con passaggio valori tra funzioni

    oregon ha scritto:


    Nell'inserimento non utilizzi il puntatore inizio che usi in stampaInizio. Hai compreso che devi utilizzare lo stesso puntatore? Se ne utilizzi due diversi, sono due diversi puntatori.

    Hai chiaro il concetto di variabile locale del C?
    Per il concetto di variabile locale gli devo dare un'occhiata con maggiori dettagli, non mi è chiaro il perché i due puntatori sono diversi
  • Re: Problemi con passaggio valori tra funzioni

    non mi è chiaro il perché i due puntatori sono diversi
    Proprio per il concetto di variabile locale che devi studiare.
Devi accedere o registrarti per scrivere nel forum
7 risposte