Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Qrevo Curv 2 Flow è l'ultima novità di casa Roborock per la pulizia di casa: un robot completo, forte di un sistema di lavaggio dei pavimenti basato su rullo che si estende a seguire il profilo delle pareti abbinato ad un potente motore di aspirazione con doppia spazzola laterale
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Abbiamo guidato per diversi giorni la Alpine A290, la prima elettrica del nuovo corso della marca. Non è solo una Renault 5 sotto steroidi, ha una sua identità e vuole farsi guidare
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Abbiamo provato a fondo il nuovo Magic 8 Lite di HONOR, e per farlo siamo volati fino a Marrakech , dove abbiamo testato la resistenza di questo smartphone in ogni condizione possibile ed immaginabile. Il risultato? Uno smartphone praticamente indistruttibile e con un'autonomia davvero ottima. Ma c'è molto altro da sapere su Magic 8 Lite, ve lo raccontiamo in questa recensione completa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-09-2004, 16: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, 18: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, 19: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, 20: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, 16: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, 18: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 20:36.
Gogeta ss4 è offline   Rispondi citando il messaggio o parte di esso
Old 23-09-2004, 20: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


Roborock Qrevo Curv 2 Flow: ora lava con un rullo Roborock Qrevo Curv 2 Flow: ora lava con un rull...
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite Alpine A290 alla prova: un'auto bella che ti fa ...
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile Recensione HONOR Magic 8 Lite: lo smartphone ind...
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
AOC propone un QD-OLED al prezzo di un I...
AGCOM segnalerà la AI Mode di Goo...
L'Estonia porta ChatGPT in classe: firma...
2 nm giapponesi contro TSMC: il piano di...
Questa scopa elettrica Tineco iFLOOR 5 è...
FRITZ!Box 6825 4G sbarca in Italia a 129...
Red Hat presenta Digital Sovereignty Rea...
AMD Zen 6 'Olympic Ridge': sette configu...
Amazon batte Walmart dopo 30 anni: il so...
Digos nel mirino dell'intelligence cines...
Sony non vuole aumentare il prezzo della...
Energia geotermica: la (costosa) rispost...
MG ha già venduto 1 milione di au...
"Something Big Is Happening" —...
Renault chiude il 2025 con una perdita r...
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: 06:55.


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