Ciao a tutti ragazzi!!!
Probabilmente dal titolo si è capito ben poco, quindi mi spiego subito.
Ho scritto un programma che fa quanto segue:
-Preleva dei numeri messi a caso da un file "listin" e li inserisce in una lista ordinata;
-Preleva da un file "listdel" dei numeri e li cancella dalla lista, se sono presenti
-Scrive in un file "newlist" la lista ordinata e priva dei numeri prelevati da listdel e cancellati;
Questo è il codice:
#include<iostream>
#include<fstream>
using namespace std;
struct nodo{
int info;
nodo *next;
};
#include"myfunc"
int main(){
nodo *head=NULL;
int x;
ifstream listin("listin.txt");
ifstream listdel("listdel.txt");
ofstream newlist("newlist.txt");
//leggo i dati da listin e creo la lista
while(!listin.eof()){
listin>>x;
nodo *nuovo;
nuovo=new nodo;
nuovo->info=x;
inserisci_ord(head,nuovo);
}
//stampo la lista ordinata
stampa_lista(head);
//elimino i nodi con il campo info uguale ai numeri di listdel
while(!listdel.eof()){
listdel>>x;
elimina_nodo(head,x);
}
//scrivo la lista sul file newlist
nodo *first;
first=head;
while(first!=NULL){
x=first->info;
newlist<<x<<" ";
first=first->next;
}
return 0;
}
queste invece sono le funzioni che ho implementato:
void inserisci_ord(nodo *&head,nodo *&nuovo){
if(head==NULL||head->info>=nuovo->info){
nuovo->next=head;
head=nuovo;
}else{
inserisci_ord(head->next,nuovo);
}
}
void elimina_nodo(nodo *&head,int x){
if(head==NULL)
return;
else{
if(head->info==x){
head=head->next;
}else{
elimina_nodo(head->next,x);
}
}
}
void stampa_lista(nodo *first){
cout<<"La lista e'"<<endl;
while(first!=NULL){
cout<<first->info<<endl;
first=first->next;
}
}
Il file listin.txt è:
23 56 88 90 13 27 29 74 87 110 135 19 92 68 77
Il file listdel.txt e':
88 87 135
il file newlist.txt dopo l'esecuzione del programma è:
13 19 23 27 29 56 68 74 77 77 90 92 110
Detto questo vi spiego il problema. In pratica succede che l'ultimo elemento che viene prelevato dal file "listin.txt", viene inserito due volte nella lista. Infatti con i dati che vi ho postato, se stampo la lista (e come potete vedere anche da ciò che viene scritto nel file "newlist.txt") il numero 77, che è l'ultimo del file "listin.txt" viene inserito 2 volte nella lista. Così mi verrebbe da dire che si tratta di qualche problema legato al !listin.eof(), ma non ne ho la minima idea. Qualcuno riesce ad aiutarmi?
P.s. la funzione di inserimento non mi da problemi...se inserisco i valori direttamente dal programma la lista viene creata correttamente. Il problema si verifica solo se prelevo i dati da un file, e solo con l'ultimo numero del file... Grazie