Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Renault 5 elettrica al giudizio definitivo: solo stupore iniziale o premi meritati?
Renault 5 elettrica al giudizio definitivo: solo stupore iniziale o premi meritati?
Dopo più di un anno dal primo test drive ci siamo rimessi al volante della Renault 5 E-Tech Electric, questa volta utilizzandola come prima auto per circa due settimane. Scoprite con noi se il progetto convince ancora
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix
Un proiettore economico, che fa della portabilità e immediatezza i suoi punti di forza. Adatto per una camera da letto o per la casa vacanze, è basato su sistema proprietario Linux ma offre piena compatibilità ufficiale a Netflix
ASUS ProArt GoPro Edition è il notebook compatto per chi crea
ASUS ProArt GoPro Edition è il notebook compatto per chi crea
Un notebook sviluppato in collaborazione con GoPro ma che risponde al meglio alle necessità di tutti coloro che creano contenuti video: robustezza, design, potenza di calcolo e funzionalità si abbinano al meglio tra di loro, pur se a prezzo di un costo elevato per via della tanta memoria onboard
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-09-2004, 15:15   #1
Gogeta ss4
Senior Member
 
L'Avatar di Gogeta ss4
 
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
File in c++

Codice:
void lettura(rubrica indice)
{
 FILE *fp;
 fp=fopen("rubrica.txt","r");
 if(fp!=NULL)
  {
   while(!feof(fp))
    {
     fread(&indice,sizeof(indice),1,fp);
	 cout <<"\nNome: " <<indice.nome;
	 cout <<"\nCognome: " <<indice.cognome;
	 cout <<"\nIndirizzo: " <<indice.indirizzo;
	 cout <<"\nNumero: " <<indice.numero;
    }
  }
 else
  cout <<"\nFile inesistente";
fclose(fp);
}
Ho un problema con tutta la lettura del file, nel file ho una sola struttura e non so perchè il ciclo di lettura me lo fa due volte visualizzandomi 2 volte la struttura, dove sbaglio??
Gogeta ss4 è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2004, 17:14   #2
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Perchè non raggiungi l'EOF subito , ma al ciclo dopo .

in pratica tu nel file hai questi dati :
Codice:
DATO1 DATO2 DATO3 DATO4 EOF
DATO1 è il nome
DATO2 è il cognome
e così via .

tu dici a fread di leggere la struttura, che è composta da quei 4 dati , ma fread non raggiunge in realtà EOF , ma si ferma a DATO4 , che è l'ultimo elemento della struttura .

Così al successivo controllo della struttura iterativa "while" il sistema si renderà conto che la fine del file non è ancora stata raggiunta, e continuerà il Ciclo .

Ovviamente ormai non c'è + niente da leggere, ma nonostante questo riesegue tutte le operazioni da capo cercando di caricare la struttura di nuovo .

Quello che ti consiglio di fare è di implementare un sistema per il controllo dei dati letti. FREAD dà come valore di ritorno il numero di elementi che è riuscita a leggere con successo .

potresti memorizzare questo valore in una variabile , e controllarla con una "if" prima di mandare in output "Nome" "Cognome" ...

Dato che la struttura è di dimensione fissata puoi fare in modo di controllare se il valore mandato in output da "fread" sia 0 .

Se il valore mandato in output da fread è 0 significa che non è riuscita a leggere COMPLETAMENTE nessuna struttura dal file durante questa chiamata e quindi puoi sfruttare questo fatto per far saltare alla tua funzione la scrittura a schermo di tutte quelle cose che non servono .

Magari quello che ho scritto può sembrare un po' oscuro , ma ti consiglio di dare bene un occhiata al prototipo di funzione di FREAD per informazioni chiarificatorie sul suo funzionamento . Se stai su un sistema UNIX "man fread" basta per avere informazioni sulla stessa .

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2004, 18:22   #3
Gogeta ss4
Senior Member
 
L'Avatar di Gogeta ss4
 
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
infatti ho fatto così, grazie
Gogeta ss4 è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2004, 19:53   #4
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
Re: File in c++

Quote:
Originariamente inviato da Gogeta ss4
Ho un problema con tutta la lettura del file, nel file ho una sola struttura e non so perchè il ciclo di lettura me lo fa due volte visualizzandomi 2 volte la struttura, dove sbaglio??
Visto che parli di C++, la cosa piu' semplice e' forse quella di ricorrere alle eccezioni per gestire la fine del file:

Codice:
#include <fstream>
using namespace std;

void lettura(rubrica indice)
{
  ifstream f("rubrica.txt" );
  f.exceptions( ios_base::eofbit );
  try {
    while( true )
    {
       f.get( (char*)(&indice) ,sizeof(indice));
       cout <<"\nNome: " <<indice.nome;
       cout <<"\nCognome: " <<indice.cognome;
       cout <<"\nIndirizzo: " <<indice.indirizzo;
       cout <<"\nNumero: " <<indice.numero;
      }
    } catch( ios_base::failure )
   { /* fine del file */ }
  /* etc */
}
Tre note:
1- codice non testato, non lamentarti se non compila :P
2- i dati sono memorizzati "in chiaro" nel file ? (visto l'estensione .txt direi di si') In tal caso non e' consigliato leggere i dati nel modo che fai tu.
3- passi "indice" per valore, forse volevi farlo per puntatore o per riferimento.
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 23-09-2004, 15:40   #5
Gogeta ss4
Senior Member
 
L'Avatar di Gogeta ss4
 
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
Piccolo problema con un ordinamento:

Codice:
void ordina (rubrica indice,temporaneo temp,temporaneo2 temp2)
{
 FILE *fp;
 int n,controllo,controllo1,pos;
 fp=fopen("rubrica.txt","r+t");
 if(fp!=NULL)
  {
   while(!feof(fp))
    {
     controllo=fread(&indice,sizeof(indice),1,fp);
	 if(controllo>0)
	  {
	   controllo=fread(&temp,sizeof(temp),1,fp);
	   if(controllo>0)
	    {
		 if(strcmp(indice.nome,temp.nome)>0) //indice.nome > temp.nome
		  {
		  pos=ftell(fp)-(sizeof(indice)*2);
		   //Inizio Scambio
		   strcpy(temp2.nome,indice.nome);
		   strcpy(temp2.cognome,indice.cognome);
		   strcpy(temp2.indirizzo,indice.indirizzo);
		   strcpy(temp2.numero,indice.numero);
		   //Fine Scambio su temp 2
		   //Inizio Scambio temp con indice;
		   strcpy(indice.nome,temp.nome);
		   strcpy(indice.cognome,temp.cognome);
		   strcpy(indice.indirizzo,temp.indirizzo);
		   strcpy(indice.numero,temp.numero);
		   //Fine Scambio su Indice
		   //Inizio Scambio di Tem2 su temp
		   strcpy(temp.nome,temp2.nome);
		   strcpy(temp.cognome,temp2.cognome);
		   strcpy(temp.indirizzo,temp2.indirizzo);
		   strcpy(temp.numero,temp2.numero);
		   //Fine Scambio di Temp2 su Temp
		   //Salvo tutto su file
           fseek(fp,pos,0);
		   if((controllo=fwrite(&indice,sizeof(indice),1,fp)) && (controllo1=fwrite(&temp,sizeof(temp),1,fp)) >0)
		    {
			 pos=ftell(fp)-sizeof(indice);
			 fseek(fp,pos,0);
     		 printf("\nRubrica ordinata correttamente");
			 printf("\nPremere un tasto per continuare...");
			 getch();
			 system("cls");
		    }
		   else
		    {
			 fclose(fp);
			 printf("\nErrore nell'ordinamento della rubrica...");
			 printf("\nPremere un tasto per continuare...");
			 getch();
			 system("cls");
		    }
		  }
	    }
	  }
  pos=ftell(fp)-sizeof(indice); 
  fseek(fp,pos,0); 
   }
  }
fclose(fp);
}
Di ordinare in ordine alfabetico lo fa, però dopo che ordina mi entra in un loop infinito...
Dove sbaglio??
Gogeta ss4 è offline   Rispondi citando il messaggio o parte di esso
Old 23-09-2004, 17:30   #6
Gogeta ss4
Senior Member
 
L'Avatar di Gogeta ss4
 
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
Devo caricare tutte le strutture che ho su file in un vettore, è giusto fare così ??

Codice:
void ordina (rubrica indice)
{
 FILE *fp;
 rubrica vettore[500];
 int n,i;
 fp=fopen("rubrica.txt","r+t");
 if(fp!=NULL)
  {
   while(!feof(fp))
     fread(vettore,sizeof(vettore),1,fp);
  }

Ultima modifica di Gogeta ss4 : 23-09-2004 alle 19:36.
Gogeta ss4 è offline   Rispondi citando il messaggio o parte di esso
Old 23-09-2004, 19:36   #7
Gogeta ss4
Senior Member
 
L'Avatar di Gogeta ss4
 
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
nessuno??
Please e per domani...
Gogeta ss4 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Renault 5 elettrica al giudizio definitivo: solo stupore iniziale o premi meritati? Renault 5 elettrica al giudizio definitivo: solo...
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix HONOR CHOICE Projector Air Pro: piccolo, portati...
ASUS ProArt GoPro Edition è il notebook compatto per chi crea ASUS ProArt GoPro Edition è il notebook c...
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090 Fable e Sol a confronto: due cartoni animati cre...
Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile Il tablet rugged leggero e sottile: Lenovo Think...
TSMC accelera sui 1,4 nanometri: produzi...
Razer compra StreamElements: cambia tutt...
Il Task Manager di Windows arriva su Mac...
Sony: PS5 resta più conveniente d...
Ubisoft spegne uno dei suoi esperimenti ...
Garante Privacy: multa da 9,5 milioni di...
Windows 11, Microsoft promette un sistem...
Windows 11, l'ultima build sperimentale ...
YouTube cancella i canali ASMR più...
Valgono miliardi, ma non pubblicano rice...
ROG Falchion Ace 75 HE: ASUS fa sul seri...
Google rilascia il primo teaser dei Pixe...
Attenti a queste TV Box: a TV spento si ...
Radeon RX 9050: arriva il primo confront...
L'AI Act più severo slitta al 202...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 02:10.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v