Ciao a tutti, e Buon Anno.
Allora, il problema che ho nasce dal fatto che ho sempre utilizzato un certo modo per inserire valori in una lista, ovvero richiamo la funzione di inserimento facendo passare l'indirizzo della testa della lista e un puntatore chiamato, ad esempio, "nuovo", che mi permetteva di creare un nuovo nodo.
Quindi il mio solito codice era questo:
struct lista {
int valore;
struct lista *next;
};
int main()
{
/*Codice.....*/
struct lista *testa, *nuovo = NULL;
printf("\n1 - Inserisci");
printf("\n2 - Stampa");
scelta = getch();
switch(scelta)
{
case '1':
inserimento(&testa, nuovo);
break;
/*Eccetera....*/
}
void inserimento(struct lista **head, *newElem)
{
int num;
printf("\nInserisci valore: ");
scanf("%d", &num);
newElem->valore = num;
newElem->next = *head;
*head = newElem;
}
E così funzionava benissimo. Ora però sto provando alcuni esami passati, dato che ho l'esame fra 1 settimana all'Università, e mi chiede di implementare una funzione di inserimento passando soltanto la "testa" senza la & commerciale. Inoltre, il tipo di dato non è più void inserimento ma int inserimento, di conseguenza ho capito che dovrò returnare qualcosa. Questo qualcosa suppongo sia la nuova testa, ma ho provato e non funziona (Warning: return makes integer from pointer without a cast).
Il codice è:
#include <stdio.h>
#include <stdlib.h>
#define CLS system("cls") //so che è brutto, ma non ho voglia ogni volta di scrivere system("cls")...
struct lista {
int valore;
struct lista *next;
};
int inserisci(struct lista *head, struct lista *newElem);
void stampa(struct lista *head);
int main()
{
struct lista *testa, *nuovo;
int scelta, scelta2;
while(1)
{
printf("\n1 - Inserisci");
printf("\n2 - Stampa");
scelta = getch();
switch(scelta)
{
case '1':
CLS;
testa =inserisci(testa, nuovo); //Mi da' lo stesso errore anche qui.
CLS;
break;
case '2':
CLS;
stampa(testa);
printf("\nPremi un tasto per tornare al menu...\n");
scelta2 = getch();
CLS;
default:
CLS;
printf("\nErrore: carattere non valido.\n");
printf("\nPremi un tasto per tornare al menu...\n");
scelta2 = getch();
CLS;
break;
}
}
}
int inserisci(struct lista *head, struct lista *newElem)
{
int numero;
printf("\nInserisci un numero: ");
scanf("%d", &numero);
newElem->valore = numero;
newElem->next = head;
head = newElem;
return head; //L'errore è in questo punto. Il programma viene eseguito, ma crasha quando
//inserisco qualcosa.
}
void stampa(struct lista *head)
{
struct lista *temp = NULL;
temp = head;
while(temp != NULL)
{
printf("\nValore inserito: %d", temp->valore);
temp = temp->next;
}
}
Mi sapreste spiegare il perché non funzioni? Io questo metodo non l'ho mai utilizzato e mi trovo un po' in difficoltà...