Liste

di il
1 risposte

Liste

Salve a tutti... ho un problema con questo programma quando vado a passare i dati dal file alla lista non me li fa caricare e di conseguenza non mi fa fare il resto per favore aiutatemi io programmo in dev c++
ecco il mio programma:
# include <iostream>
# include <fstream>
# include <string>
using namespace std;
struct lista{
             int mat;
             lista*succ;
             };
lista* testa;
void inizializza()
{
     testa=NULL;
}

bool listavuota()
{
     if(testa==NULL) return true;
     return false;
     }
void inserisci()
{
      int mat,ri;
      ofstream file("temp.txt");
      do{cout<<"dimmi la matricola da inserire"<<endl;
         cin>>mat;
         file<<mat<<endl;
         cout<<"digita 0 per continuare a inserire matricole"<<endl;
         cin>>ri;
     }while(ri==0);
     
}
void crealista(){
     int mat;
     lista *nuovo;
     lista *temp;
     lista *prec;
     ifstream file("temp.txt");
     file>>mat;
     while(file.eof()){
                        nuovo=new lista;
                        cout<< "matricola:"<<mat<<endl;
                        nuovo->mat=mat;
                        nuovo->succ=NULL;
                        if(testa==NULL) testa=nuovo;
                        else { if(testa->mat >= nuovo->mat){
                                         temp=testa;
                                         testa=nuovo;
                                         testa->succ=temp;
                                         }
          else{
               temp=testa;
               while(temp!=NULL && nuovo->mat>=temp->mat){
                                                            prec=temp;
                                                            temp=temp->succ;
                                                            }
               nuovo->succ=temp;
               prec->succ=nuovo;
               }
               }
}
}
void visualizza()
{lista *g;
 g=testa;
          do{
                cout<<g->mat<<endl;
                g=g->succ;
                }while(g!=NULL);
                }
int ricmat()
{
    int mat;
    cout<<"dammi la matricola da ricercare"<<endl;
    cin>>mat;
    lista *p;
    p=testa;
    do{
       cout<<p->mat<<endl;
                
                if(p->mat==mat) cout<<"la matricola e' presente"<<endl;  
                else p=p->succ; 
                      }while(p!=NULL);
}
int main()
{int scelta,risp;
do{cout<<"________________________________________"<<endl;
   cout<<"GESTIONE MATRICOLE UNIVERSITARIE"<<endl;
   cout<<" 1. inserire matricole nel file"<<endl;
   cout<<" 2. crea la lista "<<endl;
   cout<<" 3. ricercare una matricola"<<endl;
   cout<<" 4. visualizzare la lista"<<endl;
   cout<<" scegli l'operazione"<<endl;
   cin>>scelta;
   cout<<"__________________________________________"<<endl;
   switch(scelta){
                  case 1:inserisci();
                  break;
                  case 2:crealista();
                  break;
                  case 3:ricmat();
                  break;
                  case 4:visualizza();
                  break;
                  }
   cout<<"digita 0 per ritornare al menù principale"<<endl;
   cin>>risp;
}while(risp==0);
system ("pause");
}
Edit skynet : inserimento code tags

1 Risposte

  • Re: Liste

    Piccole modifiche che fanno la diferenza.
    1. Impara ad usare il debug.
    2. Impara ad usare while-do. Il tuo programma va in crash per colpa del do-while del tipo.
    3. Impara ad usare i code tags come da regolamento
    4. Leggere il regolamento prima di scrivere. (Anche se questo è il punto 1 in realtà)
    # include <iostream>
    # include <fstream>
    # include <string>
    using namespace std;
    
    struct lista{
    	int mat;
    	lista*succ;
    };
    
    lista* testa;
    
    void inizializza()
    {
    	testa=NULL;
    }
    
    bool listavuota()
    {
    	return (testa == NULL);
    }
    
    void inserisci()
    {
    
    	int mat,ri;
    	ofstream file("temp.txt");
    
    	do{
    		cout<<"dimmi la matricola da inserire"<<endl;
    		cin>>mat;
    		file<<mat<<endl;
    		cout<<"digita 0 per continuare a inserire matricole"<<endl;
    		cin>>ri;
    	}while(ri==0);
    
    	file.close();
    }
    
    void crealista()
    {
    	int mat;
    	lista *nuovo;
    	lista *temp;
    	lista *prec;
    	ifstream file("temp.txt");
    
    	while(file>>mat)
    	{
    		nuovo=new lista;
    		cout<< "matricola:"<<mat<<endl;
    		nuovo->mat=mat;
    		nuovo->succ=NULL;
    		if(testa==NULL) testa=nuovo;
    		else 
    		{ 
    			if(testa->mat >= nuovo->mat)
    			{
    				temp=testa;
    				testa=nuovo;
    				testa->succ=temp;
    			}
    			else
    			{
    				temp=testa;
    				while(temp!=NULL && nuovo->mat>=temp->mat)
    				{
    					prec=temp;
    					temp=temp->succ;
    				}
    				nuovo->succ=temp;
    				prec->succ=nuovo;
    			}
    		}
    	}
    }
    
    void visualizza()
    {
    	lista *g;
    	g=testa;
    	while(g != NULL)
    	{
    		cout<<g->mat<<endl;
    		g=g->succ;
    	}
    }
    
    int ricmat()
    {
    	int mat = 0;
    	cout<<"dammi la matricola da ricercare"<<endl;
    	cin>>mat;
    	lista *p;
    	p=testa;
    	while(p!=NULL)
    	{
    		cout<<p->mat<<endl;
    
    		if(p->mat==mat) cout<<"la matricola e' presente"<<endl; 
    		else p=p->succ;
    	}
    	return mat;
    }
    
    int main()
    {
    	int scelta,risp;
    	do
    	{
    		cout<<"________________________________________"<<endl;
    		cout<<"GESTIONE MATRICOLE UNIVERSITARIE"<<endl;
    		cout<<" 1. inserire matricole nel file"<<endl;
    		cout<<" 2. crea la lista "<<endl;
    		cout<<" 3. ricercare una matricola"<<endl;
    		cout<<" 4. visualizzare la lista"<<endl;
    		cout<<" scegli l'operazione"<<endl;
    		cin>>scelta;
    		cout<<"__________________________________________"<<endl;
    		switch(scelta)
    		{
    			case 1:inserisci();
    			break;
    			case 2:crealista();
    			break;
    			case 3:ricmat();
    			break;
    			case 4:visualizza();
    			break;
    		}
    		cout<<"digita 0 per ritornare al menu\' principale"<<endl;
    		cin>>risp;
    	}while(risp==0);
    
    	system ("pause");
    }
Devi accedere o registrarti per scrivere nel forum
1 risposte