Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [c++] input file

  1. #1

    [c++] input file

    ciao...

    Ho scritto un programma in c++ per prendere in input delle stringhe da un file, ma nell'esecuzione mi a l'erroe segment faileur, programmo sotto linux!
    Posto il codice dategli uno sguardo...

    codice:
    #include <iostream>
    #include <fstream> 
    #include <string> 
    
    using namespace std; 
    
    struct elem {
    	string frase; 
    	elem *ptr; 
    };
    
    typedef struct elem * elem_ptr; 
    
    bool inserisci(elem_ptr& lista, string f); 
    
    int main ( int argc, char *argv[] ) {
    	if ( argc != 2) { 
    		cerr << "Numero parametri non corretto" << endl; 
    		return 0;
    	}
    	ifstream file;
    	cout << argv[1]<<endl; 
    	file.open(argv[1], ios::in); // contrallare se il file è stato aperto
    	if (!file) { 
    		cerr<<"Apertura file non riuscita\n"; 
    		exit(1); 
    	}
    	string  frase; 
    	elem_ptr lista = NULL; 
    	while (!file.eof() ) {
    			cout << "ciao" << endl; 
    			getline(file,frase, '\n'); 
    			if (!inserisci(lista, frase)){
    			cerr << "Errore lettura del file\n" << endl; 
    			exit (1); 
    		}
    		cout << lista->frase << endl;    
    	}
    	file.close();
    	while ( lista != NULL) {
    	cout << lista->frase << endl; 
    	lista = lista->ptr; 
    	}	
    	return 0; 
    }
    
    
    bool inserisci ( elem_ptr& lista, string f) {
    	cout << "fun"<<endl;
    	if ( lista == NULL) {
    		lista  = new elem; 
    		lista->frase = f; 
    		lista->ptr = NULL; 
    	} else {
    		elem_ptr temp = lista, prec_temp  = NULL; 
    		elem_ptr nuovo = new elem;
    	        nuovo->frase = f; 	
    		while (lista != NULL && lista->frase > f) {
    			prec_temp = temp; 
    			temp = temp->ptr; 
    		} 
    		if ( temp == lista) lista = nuovo; 
    		else prec_temp->ptr = nuovo; 
    		nuovo->ptr = temp; 
             }
    return true; 
    }
    [

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Il problema si ha quando la variabile

    frase

    e' vuota (perche' ha letto dal file una riga vuota) e tenta di inserirla con

    if (!inserisci(lista, frase)){
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    scusa non si dovrebbe fermare????
    spiegati meglio...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Fermare ? E perche' ?

    Se c'e' una riga vuota nel file, questa viene letta ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Si è quindi come faccio a dirle di fermarsi??

    Un idea sarebbe se la stringa è vuota fermati...

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da PeppePes88
    Un idea sarebbe se la stringa è vuota fermati...
    Ottima idea ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381

    Re: [c++] input file

    In realtà il problema nasce dal fatto che il controllo deve essere fatto non su lista, ma su temp.

    codice:
    		while (temp != NULL && lista->frase > f) {
    			prec_temp = temp; 
    			temp = temp->ptr; 
    		}
    p.s.
    Non puoi usare una std::list?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Quello che intendevo era fare un controllo prima di

    if (!inserisci(lista, frase)){

    ed uscire dal ciclo se frase non contiene caratteri ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Si, avevo capito. Però facendo il debug mi sono accorto che quando la stringa è vuota, il while indicato viene eseguito e non essendoci il controllo del puntatore temp, il programma va in crash in quella condizione.

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.