Problema con scrittura su file

di il
7 risposte

Problema con scrittura su file

Salve premetto che sono un novizio del c++, ho un problema con il mio programma, sto creando un piccolo database contenente le informazioni personali di vari utenti e il loro codice utente,il database funziona con una matrice 4x4, (amplierò la matrice piu avanti), per ogni colonna della matrice sono contenute le informazioni di un utente , alla prima riga della colonna verrà memorizzato il codice utente e alle righe succ. altre informazoni, per passare alla registrazione di un altro utente si incrementerà la colonna della matrice. Ho un problema nello scrivere la matrice e le altre informazioni (dentro la matrice) su un file di testo chiamato "archivio.dat" e inoltre non riesco a visualizzare la matrice scritta in output. Potete darmi una mano ? Grazie in anticipo .
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main () {
	
	string m[4] [4];   //dichiaro una matrice
	int r = 0;        //riga
	int c = 0;	     // colonna

string nome;
string cognome;
string datanascita;
string codice;
                            
	ofstream fout ("archivio.txt");           //apro il file in scrittura e dichiaro FOUT come oggetto di scrittura
	while ( c < 4) {
		while ( r < 4 ) {
		cout << "Inserisci codice utente" << endl;
	cin >> m[r] [c];
	fout << m[r] [c] << endl;
	r++;                                      //incremento la riga
	cout << "inserisci nome" << endl;
	cin >> m[r] [c];
	fout << m[r] [c] << endl;
	r++;
	cout << "Inserisci cognome" << endl;
	cin >> m[r] [c];
	fout << m[r] [c] << endl;
	r++;
	cout << "Inserisci data di nascita" << endl;
	cin >> m[r] [c];
	fout << m[r] [c] << endl;
		}
		c++;
		r = 0;
	}
	fout.close();       //chiudo il file
	
ifstream fin ("archivio.txt");              //apro il file in lettura e dichiaro FIN come oggetto di lettura

if (!fin) {                                          //controllo apertura del fil
cout << "Errore nell'apertura del file" << endl;                        
}
 r = 0;                            //riporto la riga e la colonna a 0 per la visualizzazione della matrice
 c = 0;
while ( c < 4 ) {
	while ( r < 4 ) {
		fin >> m[r] [c];             //leggo l'elemento della matrice
		cout << m[r] [c] << endl;    //stampo l'elemento della matrice
		r++;
			fin >> m[r] [c];
		cout << m[r] [c] << endl;
		r++;
			fin >> m[r] [c];
		cout << m[r] [c] << endl;
		r++;
			fin >> m[r] [c];
		cout << m[r] [c] << endl;
		r++;
	}
	c++;
	r = 0;       //riporto la riga a 0 e incremento la colonna
}
fin.close();       //chiudo il file
return 0;
}

7 Risposte

  • Re: Problema con scrittura su file

    Volevi dire che in ogni "riga" ci sono le informazioni di un utente e che nella prima "colonna" sarà memorizzato il codice utente?
  • Re: Problema con scrittura su file

    Ci sono tanti piccoli problemi. Ti consiglio di leggere questo 3d https://www.iprogrammatori.it/forum-programmazione/cplusplus/array-caratteri-t38377.html
    dove ci sono molti consigli che ti saranno utili.

    Di base la logica del programma è sballata, semplicemente non si fa così praticamente niente!
    In ordine sparso:
    - la descrizione che dai è confusa, riprova! Metti anche un esempio.
    - prima ricevi l'input dall'utente POI lo salvi.
    - dopo in messaggio di errore sull'aperture del file non continui semplicemente a leggerlo!
    - programmazione strutturata: qua non c'è struttura ma solo un lungo main().
    - la posizione di "r = 0;" non è molto corretta.
    - non dici che problema hai!
    - non posti il contenuto (eventuale) del file che hai scritto.
    etc...
  • Re: Problema con scrittura su file

    Vabbè come primissimo programma non è poi terribile ho visto di peggio
  • Re: Problema con scrittura su file

    Ho modificato il programma postato sopra, ho tolto la matrice e adesso il programma è strutturato totalmente in maniera diversa, premetto che è solamente un programma di test, poi lo modificherò più avanti. Il programma inizia chiedendo all'utente se vuole creare un account nuovo o visualizzarne uno esistente, se si decide di crearne uno nuovo il programma fa immettere all'utente le sue informazioni e fa immettere un codice utente per l'accesso; scrivendo tutto su un file di testo. Ho un problema perchè nella fase in cui vado a scegliere di visualizzare le informazioni di un utente immettendo il suo codice, il programma si ferma e finisce. In teoria il programma dovrebbe funzionare in modo che immettendo un codice utente (registrato al momento della creazione dell'account) dovrebbe far visualizzare tutte le informazioni relative al codice utente appena immesso. Come posso risolvere ? Grazie in anticipo
    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;
    int main () {
    string codicediaccesso;  	
    string scelta;
    
    string nome;
    string cognome;
    string datanascita;
    string codice;
                                
    	
    	cout << "esistente o nuovo" << endl;                  //scelgo se creare un account nuovo o visualizzarne uno esistente
    	cin >> scelta;
    	while (scelta == "nuovo") {
    		
    	ofstream fout ("archivio.dat");
    	
    	cout << "inserisci nome" << endl;
    	cin >> nome;
    	fout << nome << endl;
    	cout << "Inserisci cognome" << endl;
    	cin >> cognome;
    	fout << cognome << endl;
    	cout << "Inserisci data di nascita" << endl;
    	cin >> datanascita;
    	fout << datanascita << endl;
    	cout << "Inserisci codice utente" << endl;
    	cin >> codice;
    	fout << codice << endl;
    	
    	fout.close();
    	
    	cout << "esistente o nuovo" << endl;              //scelta all'interno del ciclo
    	cin >> scelta;
    }
    
    cout << "Inserire codice per l'accesso" << endl;                  //inserimento codice per la visualizzazione delle informazioni di un account
    cin >> codicediaccesso;
    
    ifstream fin ("archivio.dat");                     //apertura file con oggetto di lettuea FIN
    
    if (!fin) {                                             //messaggio di errore in caso il file non dovesse aprirsi
    cout << "Errore nell'apertura del file" << endl;
    }
    
    fin >> codice;
    while(!fin.eof()){                                             //legge finchè il file non è finito
    	if ( codice == codicediaccesso ) {             //se il codice immesso sopra dovesse essere uguale ad un codice di un account esistente il programma dovrebbe far visualizzare le informazioni dell'account relativo al codice
    	fin >> nome;
    	cout << nome;
    	fin >> cognome;
    	cout << cognome;
    	fin >> datanascita;
    	cout << datanascita;
    	fin >> codice;
    	}	
    	fin.close();
    }
    
    fin.close();
    return 0;
    }
  • Re: Problema con scrittura su file

    +m2+ ha scritto:


    Vabbè come primissimo programma non è poi terribile ho visto di peggio
    Ma certo! Sono solo critiche costruttive, sintetiche e scritte in fretta...
  • Re: Problema con scrittura su file

    skg ha scritto:


    
    	while (scelta == "nuovo") {
    
    Non fare così:
    - se l'utente scrive "n" o "nuov" o "Nuovo" non ci entrerà mai.
    - non c'è un modo per uscire dal ciclo, nessuna possibilità, il programma non finisce MAI: ti pare normale???
    Non scrivere programmi inutili, cerca di capire come funzionano le istruzioni condizionali e costruisci degli esempi per testarle. Solo dopo potrai scrivere un "programma".
  • Re: Problema con scrittura su file

    nicolap ha scritto:


    skg ha scritto:


    
    	while (scelta == "nuovo") {
    
    Non fare così:
    - se l'utente scrive "n" o "nuov" o "Nuovo" non ci entrerà mai.
    - non c'è un modo per uscire dal ciclo, nessuna possibilità, il programma non finisce MAI: ti pare normale???
    Non scrivere programmi inutili, cerca di capire come funzionano le istruzioni condizionali e costruisci degli esempi per testarle. Solo dopo potrai scrivere un "programma".

    nicolap ha scritto:


    skg ha scritto:


    
    	while (scelta == "nuovo") {
    
    Non fare così:
    - se l'utente scrive "n" o "nuov" o "Nuovo" non ci entrerà mai.
    - non c'è un modo per uscire dal ciclo, nessuna possibilità, il programma non finisce MAI: ti pare normale???
    Non scrivere programmi inutili, cerca di capire come funzionano le istruzioni condizionali e costruisci degli esempi per testarle. Solo dopo potrai scrivere un "programma".
    sto cercando di capire il metodo di scrittura su file e di capire gli errori che ho fatto nel codice postato sopra, non come funziona un ciclo!
Devi accedere o registrarti per scrivere nel forum
7 risposte