Col ciclo while non mi riappare il menù dopo l'inserimento e quindi non mi permette la stampa.
Questo è il codice
#include <stdio.h>
#include <stdlib.h>
/***** S T R U T T U R E ******/
struct sotto_nodo
{
char carattere;
struct sotto_nodo *nextPtr1;
};
struct nodo
{
int intero;
struct nodo *nextPtr; //puntatore al nodo successivo
struct sotto_nodo *sottonodoPtr; //puntatore al tipo struct sotto_nodo di nome sottonodoPtr
};
/****** T Y P E D E F ******/
typedef struct sotto_nodo SottoNodo;
typedef struct nodo Nodo;
typedef SottoNodo *SottoNodoPtr;
typedef Nodo *NodoPtr;
/****** P R O T O T I P I D I F U N Z IO N E ******/
void menu();
NodoPtr crea_lista(int elemento1);
void inserisci_lista (NodoPtr *head, int elementi);
NodoPtr trova (NodoPtr head, int elemento);
void inserisci_sottolista (SottoNodoPtr *head1, char caratteri);
void stampa(NodoPtr testalistaPtr);
void clear();
/****** M A I N ******/
int main (void)
{
NodoPtr testaPtr = NULL;
NodoPtr copia_testaPtr = NULL;
char scelta1;
int scelta=0;
while (scelta<1 || scelta>3)
{
menu();
printf("Fai una scelta: ");
fflush(stdin);
scanf("%d", &scelta);
switch (scelta)
{
case 1:
{
int i;
char j;
int elelista;
int elem1;
printf("Inserisci il primo elemento: ");
fflush(stdin);
scanf("%d", &elem1);
testaPtr = crea_lista(elem1);
if (testaPtr != NULL)
{
copia_testaPtr = testaPtr;
do
{
printf("Vuoi inserire ulteriori elementi? S o N: ");
fflush(stdin);
scanf("%c", &scelta1);
if (scelta1 == 's' || scelta1 == 'S')
{
printf("Inserisci elemento: ");
fflush(stdin);
scanf("%d", &i);
inserisci_lista(&testaPtr, i);
}
}
while (scelta1 == 's' || scelta1 == 'S');
if (scelta1 == 'n' || scelta1 == 'N')
{
printf("Vuoi inserire elementi nella sottolista? S o N: ");
fflush(stdin);
scanf("%c", &scelta1);
if (scelta1 == 's' || scelta1 == 'S')
{
printf("In quale elemento della lista principale?: ");
fflush(stdin);
scanf("%d", &elelista);
copia_testaPtr = trova(testaPtr, elelista);
if (copia_testaPtr != NULL)
{
printf("\nTrovato l'elemento: %d \n\nInserisci il primo elemento: ", copia_testaPtr->intero);
fflush(stdin);
scanf("%c", &j);
inserisci_sottolista(&(copia_testaPtr->sottonodoPtr), j);
}
do
{
printf("Vuoi inserire ulteriori elementi? S o N:");
fflush(stdin);
scanf("%c", &scelta1);
if (scelta1 == 's' || scelta1 == 'S')
{
printf("Inserisci elemento successivo: ");
fflush(stdin);
scanf("%c", &j);
inserisci_sottolista(&(copia_testaPtr->sottonodoPtr), j);
}
}
while (scelta1 == 's' || scelta1 == 'S');
}
else
printf("Scelta errata!\n");
}
else
printf("Impossibile allocare la memoria!\n");
}
}
break;
case 2:
{
if (testaPtr==NULL)
{
printf("errore lista non caricata\n");
break;
}
else
stampa(testaPtr);
}
break;
}
}
free(testaPtr);
free(copia_testaPtr);
system("pause");
return 0;
}
/****** I M P L E M E N T A Z I O N E F U N Z I O N I ******/
void menu()
{
printf("[1] - Per inserire gli elementi nella lista\n");
printf("[2] - Per stampare la lista\n");
printf("[3] - Per terminare il programma\n");
};
NodoPtr crea_lista (int elemento1)
{
NodoPtr headPtr = malloc(sizeof(Nodo));
headPtr->intero = elemento1;
headPtr->nextPtr = NULL;
headPtr->sottonodoPtr = NULL;
return headPtr;
};
void inserisci_lista (NodoPtr *head, int elementi)
{
NodoPtr newPtr = malloc(sizeof(Nodo));
newPtr->intero=elementi;
newPtr->nextPtr = *head;
*head = newPtr;
};
NodoPtr trova (NodoPtr head, int elemento)
{
while (head->intero != elemento && head != NULL)
{
head = head->nextPtr;
}
if (head->intero == elemento)
return head;
else
return NULL;
};
void inserisci_sottolista (SottoNodoPtr *head1, char caratteri)
{
SottoNodoPtr newPtr = malloc(sizeof(SottoNodo));
newPtr->carattere = caratteri;
newPtr->nextPtr1 = *head1;
*head1 = newPtr;
};
void stampa(NodoPtr testalista)
{
printf("head -> ");
NodoPtr copia_testa = testalista;
while (testalista != NULL)
{
printf("%d -> ", testalista->intero);
testalista = testalista->nextPtr;
}
printf("NULL\n");
while (copia_testa != NULL)
{
printf("headsub -> (%d) -> ", copia_testa->intero);
while (copia_testa->sottonodoPtr != NULL)
{
printf("%c -> ", copia_testa->sottonodoPtr->carattere);
copia_testa->sottonodoPtr = copia_testa->sottonodoPtr->nextPtr1;
}
printf("NULL\n");
copia_testa = copia_testa->nextPtr;
}
};