Ok,ho risolto diversi problemi ma ora ho problemi a riproporre il menu dopo la creazione del nodo o dopo aver fatto qualsiasi operazione, come faccio? metto il codice aggiornato
#include <iostream>
using namespace std;
struct s_nodo
{
char codice_foto [30];
struct s_nodo *next;
};
typedef struct s_nodo nodo;
typedef nodo* p_nodo;
void CreaNodo();
void inserimento_coda(p_nodo, p_nodo);
void inserimento_pila(p_nodo, p_nodo);
int inputc(int, int);
void menu();
void menu2();
bool ListaVuota(p_nodo);
void EstrazioneT(p_nodo);
void Visualizzazione(p_nodo);
void Ricerca(p_nodo);
void elimina_lista(p_nodo);
void case_1(p_nodo,p_nodo,int );
int main()
{
p_nodo pTesta=NULL, p1, p2, nuovo;
int scelta, scelta2,x=0;
do{
menu();
cout<<"Fai la tua scelta: "<<endl;
scelta = inputc(1,3);
switch(scelta){
case 1:
menu2();
scelta2=inputc(1,4);
switch(scelta2){
case 1:
inserimento_pila(pTesta,nuovo);
break;
case 2:
EstrazioneT(pTesta);
break;
case 3:
Visualizzazione(pTesta);
break;
case 4:
Ricerca(pTesta);
break;
do{
case_1(pTesta,nuovo,scelta);
cout<<"se vuoi selzionare un'altra voce del menu digitare 1"<<endl;
cin>>x;
}while(x==1);
}
break;
case 2:
menu2();
scelta2=inputc(1,4);
switch(scelta2)
{
case 1:
inserimento_coda(pTesta,nuovo);
break;
case 2:
EstrazioneT(pTesta);
break;
case 3:
Visualizzazione(pTesta);
break;
case 4:
Ricerca(pTesta);
break;
}
case 3:
elimina_lista(pTesta);
break;
}
cout<<"digitare 1 per scegliere un'altra opzione"<<endl;
cin>>x;
}while(x==1);
return 0;
}
void CreaNodo()
{
char cod[30];
p_nodo p1;
double num;
cout<<"\nDigita il codice della foto da inserire nel nodo...: ";
cin>>cod;
cout<<"\nscrivere la dimensione in bytes...: ";
cin>>num;
p1 = new nodo;
p1->codice_foto[30]=cod[30];
p1->next=NULL;
}
void inserimento_coda(p_nodo p, p_nodo nuovo)
{
p_nodo p1;
int x=0;
do{
CreaNodo();
if(p==NULL)
{
p=nuovo;
}
else
{
p1=p;
while(p1->next != NULL)
{
p1=p1->next;
}
p1->next=nuovo;
}
cout<<"digitare 1 per aggiungere un nuovo codice"<<endl;
cin>>x;
}while(x==1);
return;
}
void inserimento_pila(p_nodo p, p_nodo nuovo)
{
int y=0;
do{
cout<<"Inserisci in testa il nuovo codice"<<endl;
CreaNodo();
if(p!=NULL)
{
nuovo->next=p;
}
cout<<"digitare 1 per aggiungere un nuovo codice"<<endl;
cin>>y;
p=nuovo;
}while(y==1);
return ;
}
int inputc(int vmin, int vmax)
{
int valore=0;
do
{
cin>>valore;
if (valore<vmin || valore>vmax)
{
cout<<"Valore inserito non accettabile.\n";
cout<<"Inserire un valore compreso tra "<<vmin<<" e "<<vmax<<": ";
}
}while(valore<vmin || valore>vmax);
return valore;
}
void menu()
{
cout<<"//////////////////////////////////////////"<<endl;
cout<<"Premi 1 se vuoi una lista gestita in coda"<<endl;
cout<<"Premi 2 se vuoi una lista gestita in pila"<<endl;
cout<<"Premi 3 se vuoi deallocare una lista"<<endl;
cout<<"//////////////////////////////////////////"<<endl;
}
void menu2()
{
cout<<"//////////////////////////////////////////"<<endl;
cout<<"digita 1 se vuoi creare un nodo"<<endl;
cout<<"digita 2 se vuoi estrarre"<<endl;
cout<<"digita 3 se vuoi visualizzare"<<endl;
cout<<"digita 4 se vuoi cercare in base al codice foto"<<endl;
cout<<"//////////////////////////////////////////"<<endl;
}
bool ListaVuota(p_nodo p)
{
bool vuota = true;
if ( p == NULL)
{
cout <<" ATTENZIONE !! Lista vuota. "<<endl;
vuota = false;
}
return vuota;
}
void EstrazioneT(p_nodo p)
{
p_nodo p1;
cout<<"\n===============================";
cout<<"\n==== Estrazione di un nodo ====";
cout<<"\n===============================\n";
if (ListaVuota(p) == true)
{
p1 = p;
cout << " Nodo estratto ---> " << p1->codice_foto<<endl;
if (p1->next == NULL)
{
p = NULL;
}
}
}
void Visualizzazione(p_nodo p)
{
p_nodo p1;
int x;
if (ListaVuota(p) == true)
{
p1 = p;
while (p1 != NULL)
{
x++; //posizione
cout <<" Nodo "<<x<<"--> "<< p1->codice_foto<<endl;
p1 = p1->next;
}
}
}
void Ricerca(p_nodo p)
{
p_nodo p1;
bool flag=false;
int x=0;
cout<<"\n========================================\n";
cout<<"==== Ricerca di un nodo nella lista ====\n";
cout<<"========================================\n";
if (ListaVuota(p) == true)
{
cout<<"\n digita il codice foto da ricercare .....: ";
cin>>p->codice_foto;
p1 = p;
while (p1 != NULL && flag == false)
{
x++;
if (p1->codice_foto == p->codice_foto)
{
flag=true;
}
else
{
p1 = p1->next;
}
}
if (flag == true)
{cout << "\n la foto occupa "<<x+4<<" byte \n";}
else
{cout << "\n codice foto non trovato !!\n";}
}
}
void elimina_lista(p_nodo p)
{
if (ListaVuota(p) == true)
{
p = NULL;
cout<<"Lista eliminata!";
}
}
void case_1(p_nodo p, p_nodo nuovo,int scelta)
{
switch(scelta){
case 1:
inserimento_pila(p,nuovo);
break;
case 2:
EstrazioneT(p);
break;
case 3:
Visualizzazione(p);
break;
case 4:
Ricerca(p);
break;
}
return;
}