Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C++] problema con lettura da file.txt

    salve a tutti,
    sto realizzando un programmino "airport manager": due classi, airport e flights. il programma sostanzialmente si sviluppa secondo due switch: il primo consente di scegliere l'aeroporto di partenza da un file di testo che stampo a video (e fin qui tutto bene). quando scelgo, per esempio, Roma, lo switch mi fa settare degli attributi dell'oggetto Airport*Roma:
    codice:
    class Airport {                 \\questa è la classe airport
    	string _name;
    	vector<string>_destinations;
            .....
            public:
               void setDestinations(vector <string> destinazioni)  {  \\mi setta il vector _destinations
                for(unsigned int i=0;i<destinations.size();i++){
            	_destinations[i]=destinazioni[i];
    }
    
    Airport* chooseAirport(){   \\ritorna puntatore, sarà usato dal secondo choose
    	string linea;
    	int aeroporto;
    	cout<<"scegli il numero corrispondente all'areoporto desiderato"<<endl;
    	ifstream read("aeroportidisponibili.txt", ios::in); \\qui mi legge un file con vari aeroporti scritti su;
    	if(read){
    		while(!read.eof()){
    			getline(read,linea,'\n');
    			cout<<linea<<endl;   \\e fin qui ok!
    		}
    		read.close();
    	}
    	cin>>aeroporto;
    	switch(aeroporto){
    	case 1:
    	{
    		static Airport*Roma;
    		Roma=new Airport();
    		vector <string> filedestination;
    		string name;
    		name="Roma";
    
                    ifstream read;
            	read.open("destinazioniroma.txt", ios::in);
            	if(read){
            		while(!read.eof()){
            					string linea1;
            				getline(read,linea1,'\n');
            			    filedestination.push_back(linea1);  \\il problema credo sia questo perchè se gli metto un cout invece il programma prosegue normalmente; ma io devo memorizzare i dati estratti su un vector<string> e poi copiarlo nell'attributo vector<string>_destinations della classe Airport 
            				}
            				read.close();
            			}
            	name->setDestinations(filedestination);  \\qui copio filedestination dentro _destination, cosi l'oggetto Airport*Roma possiede già le destinazioni disponibili.
    		Roma->setName(name);
    
    		return Roma;
    		break;
    	}
    praticamente il compilatore non mi da errori, ma il programma si blocca e termina l'esecuzione. ho incluso vector, string, iostream, fstream.....
    avete idea del motivo di questo errore?

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    perchè un puntatore statico? che poi ritorni per giunta?

    ps: il break è inutile perchè fai return

  3. #3
    mi hanno detto dei miei compagni di corso che va dichiarato statico altrimenti mi dava errore.....non ho capito molto bene perchè, o meglio, a loro l'ha detto il prof e loro non hanno capito molto bene perchè va fatto statico!

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    non ha alcun senso un puntatore statico dichiarato poi in una routine.. la parola chiave static serve a tutt'altro..

    per capire il perchè si blocca serve vedere il main, se ci sono errori sapere quali e infine più o meno serve sapere dove si "rompe"

  5. #5
    il problema credo sia nell'apertura dei vari txt files "destinazioniroma", "destinazionimilano", e con il push_back, perchè il file .txt "aeroportidisponibili" me lo legge e stampa a video tranquillamente,,,,

    il main è

    codice:
    int main(){
    	chooseToDo(chooseAirport());
    
    	return 0;
    }
    le funzioni chiamate sono

    codice:
    Airport* chooseAirport(){
    	string linea;
    	int aeroporto;
    	cout<<"scegli il numero corrispondente all'areoporto desiderato"<<endl;
    	ifstream read("aeroportidisponibili.txt", ios::in);
    	if(read){
    		while(!read.eof()){               //qui funziona normalmente 
    			getline(read,linea,'\n');
    			cout<<linea<<endl;
    		}
    		read.close();
    	}
    	cin>>aeroporto;
    	switch(aeroporto){
    	case 1:
    	{
    		Airport*Roma;
    		Roma=new Airport();
    		vector <string> filedestination;
    		string name;
    		name="Roma";
    		ifstream read("destinazioniroma.txt", ios::in);
    			if(read){              //
    si blocca qui
    string str;
    while(!read.eof()){
    getline(read,str,'\n');
    filedestination.push_back(str);
    }
    read.close();
    }


    Roma->setName(name);
    Roma->setDestinations(filedestination);

    return Roma;
    break;
    }
    case 2:
    {
    Airport* Milano;
    Milano=new Airport();
    vector <string> filedestination;
    string name;
    name="Milano";
    ifstream read("destinazionimilano.txt", ios::in);
    if(read){
    string str;
    while(!read.eof()){
    getline(read,str,'\n');
    filedestination.push_back(str);
    }
    read.close();
    }

    Milano->setName(name);
    Milano->setDestinations(filedestination);
    return Milano;
    break;
    }
    case 3:
    {
    Airport*Pisa;
    Pisa=new Airport();
    vector <string> filedestination;
    string name;
    name="Pisa";


    ifstream read("destinazionipisa.txt", ios::in);
    if(read){
    string str;
    while(!read.eof()){
    getline(read,str,'\n');
    filedestination.push_back(str);
    }
    read.close();
    }
    Pisa->setName(name);
    Pisa->setDestinations(filedestination);
    return Pisa;
    break;
    }
    case 4:
    {
    Airport*Bologna;
    Bologna=new Airport();
    vector <string> filedestination;
    string name;
    name="Bologna";


    ifstream read("destinazionibologna.txt", ios::in);
    if(read){
    string str;
    while(!read.eof()){
    getline(read,str,'\n');
    filedestination.push_back(str);
    }
    read.close();
    }
    Bologna->setName(name);
    Bologna->setDestinations(filedestination);
    return Bologna;
    break;
    }
    case '0':
    {

    break;
    }



    }return 0;



    }



    e poi la funzione dovrebbe proseguire con chooseToDo, che non ho ancora completato

    codice:
    void chooseToDo(Airport*name){
    
    	bool end=false;
    
    
    
    		cout<<"aeroporto di "<<name->getName()<<endl;
    		cout<<"destinazioni disponibili\n"<<endl;
            for(unsigned int i=0;i<(name->getDestinations()).size();i++){
            	cout<<(name->getDestinations())[i];
            }
    
    
    
    
    		do{
    		int choice;
    		cout<<"Cosa vuoi fare?"<<endl;
    		cout<<"1.Inserisci nuovo volo; 2.Cancella un volo;3.Prenota un volo; 0.Esci"<<endl;
    		cin>>choice;
    		Airport*airport;
    		switch(choice){
    		case 1:
    		{
    			airport->createFlight(name);
    			break;
    		}
    		case 2:
                    ........
                        ........... 
    -.............(altro)
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.