Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    35

    [C++] scorrere file attraverso puntatore

    Ragazzi ho un piccolo problema con una funzione che deve mostrare un oggetto con più prestiti, confrontandolo con dei record presenti in un file.
    Siccome può capitare che due o più record abbiano la stessa quantità di prestiti, la funzione cerca prima il più grande e poi lo riconfronta stampando tutti quelli che hanno lo stesso numero.
    Forse con il codice riesco a spiegarmi meglio:

    codice:
    void piu_pres(){
    	
    	libro current;
    	libro max;
    
    	system("CLS");
    	ifstream lib("Libri", ios::in | ios::binary);
    
    	if(!lib){
    		cout<<endl<<"Impossibile aprire il file";
    		abort();
    	}
    
    	lib.read((char*)&current, sizeof(libro));					
    
    	max=current;	
    
    	while(!lib.eof()){
    		if(max.get_prest() < current.get_prest()) 
    			max=current;
    		lib.read((char*)&current, sizeof(libro));
    		}
            lib.seekg(ios::beg);
    
    	lib.read((char*)&current, sizeof(libro));
    
           cout<<"Il/i lettore/i con piu' prestiti e'/sono:"<< endl << endl;
    
    	while(!lib.eof()){
    		cout<<endl;
    		if(max.get_prest() == current.get_prest()) 
    			current.get_libro();
    		lib.read((char*)&current, sizeof(libro));
    		}
    	
    	in.close();
    
    	lib.close();
    	system("pause");
    
    }
    I metodi della classe funzionano e sono testati, get_libro() serve a stampare a video la scheda del libro.
    In pratica su una lista di libri si deve stampare quello o quelli con più prestiti.
    Dopo la prima lettura deve effettuarne un altra, il puntatore messo in ios::beg mostra la posizione -1, ma poi la read() non legge e non capisco perché.

    Vi chiedo un consiglio o magari se conoscete un algoritmo migliore...
    Vi ringrazio anticipatamente

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

    Re: [C++] scorrere file attraverso puntatore

    ...e non capisco perché.
    Perché una volta settato il bit di eof non è sufficiente riportare il file pointer all'inizio per resettarlo. Usa lib.clear() per farlo.

    Vi chiedo un consiglio o magari se conoscete un algoritmo migliore...
    Meglio caricare tutti i record in memoria, invece di spostare il file pointer.
    L'esecuzione dell'algoritmo risulta più veloce.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    35
    grazie mille ho risolto con clear()...

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 © 2025 vBulletin Solutions, Inc. All rights reserved.