PDA

Visualizza la versione completa : [C++] Record.. Esistono?


Whistler
26-05-2010, 23:53
Salve, dovrei fare un programma in C++ (seguendo uno già esistente fatto il pascal) e mi servirebbe creare i record anche in C++, esistono?
Una volta ho letto qualcosa circa il costrutto struct, ma è la stessa cosa dei record? Se si, potete farmi un esempio di sintassi?
Grazie

P.S. se può servire il listato in pascal è questo: http://pastebin.com/MJ4Rdg9s

oregon
26-05-2010, 23:59
Sì, le struct vanno bene ... ma lo devi fare in C++? Allora puoi usare le classi ... e le stringhe (string) del C++ ...

Whistler
27-05-2010, 00:05
Originariamente inviato da oregon
Sì, le struct vanno bene ... ma lo devi fare in C++? Allora puoi usare le classi ... e le stringhe (string) del C++ ...
Classi? Non ho proprio idea di dove partire con la programmazione ad ogetti in C++...
Le stringhe le sto usando (tramite l'header string.h).

Ora mi è sorto un problema: come si fa un file di record? In pascal i file di testo sono completamente diversi dai file di record; è uguale anche in C++?

Io sono arrivato qui:


#include <string.h>
#include <iostream>

using namespace std;

struct rec_studenti {
string nome;
string cognome;
string matricola;
string classe;
string sezione;
};

int n, last;

int main(int argc, char *argv[])
{
system("PAUSE");
return EXIT_SUCCESS;
}
e moh come lo dichiaro un file di record?

oregon
27-05-2010, 00:11
Usa la fopen per aprire il file in binario e la fwrite/fread per scrivere/leggere una struttura. Ti posizioni sul record con la fseek.

Tieni presente che il record deve avere dimensioni fisse. E' meglio usare dei vettori di stringhe all'interno della struct



struct rec_studenti {
char nome[25];
char cognome[25];
char matricola[10];
char classe[3];
char sezione[2];
};

Whistler
27-05-2010, 00:19
Originariamente inviato da oregon
Usa la fopen per aprire il file in binario e la fwrite/fread per scrivere/leggere una struttura. Ti posizioni sul record con la fseek.

Tieni presente che il record deve avere dimensioni fisse. E' meglio usare dei vettori di stringhe all'interno della struct



struct rec_studenti {
char nome[25];
char cognome[25];
char matricola[10];
char classe[3];
char sezione[2];
};

Ehm, non avermene, ma non ho capito granché bene come si usa fseek() :/

oregon
27-05-2010, 00:26
http://www.cplusplus.com/reference/clibrary/cstdio/fseek/

Whistler
27-05-2010, 00:35
#include <string.h>
#include <iostream>

using namespace std;

struct rec_studenti {
char nome[25];
char cognome[25];
char matricola[10];
char classe[3];
char sezione[2];
};

int n, last;
rec_studenti studente;

int main(int argc, char *argv[]) {
FILE *f;

f = fopen("studenti.txt", "w");

system("PAUSE");
return EXIT_SUCCESS;
}

void file_write(struct rec_studenti) {
FILE *f;
f = fopen("studenti.txt", "r");

fseek(f, 0,SEEK_END);

while (studente.nome != "fine") {
cout << "Inserire nome alunno ";
cin >> studente.nome;

if (studente.nome != "fine") {
cout << "Inserire cognome alunno ";
cin >> studente.cognome;

cout << "Inserire matricola ";
cin >> studente.matricola;

cout << "Inserire classe ";
cin >> studente.classe;

cout << "Inserire sezione ";
cin >> studente.sezione;
}

// scrive i dati appena letti sul file (se il valore non è 'fine')
if (studente.nome != "fine")
fwrite(rec_studenti, 1, sizeof(rec_studenti), f);
}

}
Fin ora ho scritto questo, ma a fwrite la compilazione si interrompe e mi trova un errore: "expected primary-expression before ',' token".. umh?

MacApp
27-05-2010, 02:54
Originariamente inviato da Whistler


fwrite(rec_studenti, 1, sizeof(rec_studenti), f);

Fin ora ho scritto questo, ma a fwrite la compilazione si interrompe e mi trova un errore: "expected primary-expression before ',' token".. umh?

il primo argomento di fwrite deve essere un indirizzo, non un tipo.


fwrite(&studente, 1, sizeof(rec_studenti), f);

;-)

Alex'87
27-05-2010, 10:38
Originariamente inviato da Whistler
Le stringhe le sto usando (tramite l'header string.h).Usi la classe string includendo string.h... ed il compilatore non si lamenta? :master:

Whistler
27-05-2010, 20:32
Originariamente inviato da MacApp
il primo argomento di fwrite deve essere un indirizzo, non un tipo.


fwrite(&studente, 1, sizeof(rec_studenti), f);

;-)
Ok grazie per il consiglio, proverò appena posso (non è più urgentissimo ormai :P)


Usi la classe string includendo string.h... ed il compilatore non si lamenta?
Dovrebbe? :master:

Loading