PDA

Visualizza la versione completa : [c++]salvo e richiamo


apatico
18-10-2004, 20:52
devo creare un programma dove l'utente scriva per esempio "a" e lo salvi e lo richiami cliccando qualcosa.
qualcuno gentilmente mi potrebbe postare qualcosa di simile per studiarlo.

gandalf45
18-10-2004, 22:02
So che l'hai chiesto in C++
ma questo codice funziona lo stesso :P


#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;

void save();
void load();

struct casa{
int num;
char indirizzo[40];
};

int main(){
save();
load();

system("PAUSE");
}

void save(){
struct casa c;

c.num = 23;
strcpy(c.indirizzo,"Via Trionfale");

FILE *f;

f = fopen("indirizzo.txt","w"); //"w" specifica che il file aperto in scittura

fwrite(&c, sizeof(c),1, f);

fclose(f);
}

void load(){
struct casa c;
FILE *f;
f = fopen("indirizzo.txt","r"); //"r" == file apperto in lettura

fread(&c, sizeof(c),1, f);
fclose(f);

cout << "Abiti in: " << c.indirizzo << " n." << c.num << "\n\n";
}

Se qualcosa non ti chiaro posta pure :)

[edit]
Molti programmatori ritengono che non sia una buona cosa fare "fwrite" e "fread" di un intero struct, cos perdi la portabilit ad altri OS del file creato.

Essendo questo codice a scopo educativo non mi sono fatto problemi :fagiano:

apatico
19-10-2004, 14:11
implicit declaration of function `int system(...)'
mi da questo errore perch?

Lardoman 2.0
19-10-2004, 14:15
Originariamente inviato da apatico
implicit declaration of function `int system(...)'
mi da questo errore perch?



#include <stdlib.h>

apatico
19-10-2004, 15:51
#include <stdlib.h>
#include <iostream>
#include <string.h>
using namespace std;

void save();
void load();

struct casa{
int num;
char indirizzo[40];
};

int main(){
save();
load();

system("PAUSE");
}

void save(){
struct casa c;

c.num = 23;
strcpy(c.indirizzo,"Via Trionfale");

FILE *f;

f = fopen("indirizzo.txt","w"); //"w" specifica che il file aperto in scittura

fwrite(&c, sizeof(c),1, f);

fclose(f);
}

void load(){
struct casa c;
FILE *f;
f = fopen("indirizzo.txt","r"); //"r" == file apperto in lettura

fread(&c, sizeof(c),1, f);
fclose(f);

cout << "Abiti in: " << c.indirizzo << " n." << c.num << "\n\n";
}

mi da 8 errori,dice anche che ci sono alcuni file non dichiarati

gandalf45
19-10-2004, 21:36
Prova ad aggiungere "#include <stdio.h>"

apatico
20-10-2004, 10:35
il programma adesso funziona per non esattamente quello che cercavo.(ma questo che mi avete postato qualcosa che vale la pena di studiare).
io volevo che fosse l'utentre a scrivere dove abitava memorizzarlo e premendo un certo tasto vedere tutto quello che aveva memorizzato.............
vorrei postato qualcosa cos........................................

gandalf45
20-10-2004, 16:43
Basta sostituire questo pezzo di codice:

c.num = 23;
strcpy(c.indirizzo,"Via Trionfale");
con qualcosa che legge l'input dall'user (es. cin (http://cplus.about.com/library/glossary/bldef-cin.htm))

Cmq sia ti consiglio di comprare un libro sulla programmazione C\C++; ci troverai molti esempi utili e sicuramente delle spiegazioni + eusaurienti delle mie :D

apatico
20-10-2004, 18:10
ho cercato di buttare gi qualcosa ma troppo poco:



#include <stdlib.h>
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;

void save();
void load();

struct casa{
int num;
char indirizzo[40];
};

int main(){
save();
load();

system("PAUSE");
}

void save()
{
//il problema che qui non so cosa metterci per realizzarlo
}


void load()
{
//stessa cosa
}


se qualcuno riempisse di codice al posto dei miei commenti..............

Angioletto
20-10-2004, 18:21
Originariamente inviato da apatico

io volevo che fosse l'utentre a scrivere dove abitava memorizzarlo e premendo un certo tasto vedere tutto quello che aveva memorizzato.............


devi creare delle variabili da passare alla funzione, variabile il cui valore viene inserito dall'utente da linea di comando..
usa i file per fare questo.
ti posto un programma che feci all'epoca in cui dovevo fare l'esame di programmazione, dove inserisco da tastiera il vettore in un file e poi vado a leggere il file



#include <iostream.h>
#include <stdlib.h>
#include <fstream.h>

const int nmax = 50;
typedef int vettore[nmax];

void leggi_vettore (vettore& , int&);
void salva_vettore (const vettore& , const int);
void leggi_da_File (vettore& , int&);
void stampa_vettore (const vettore& , const int);

int main()
{
vettore v1 , v2;
int dim1 , dim2;

leggi_vettore ( v1 , dim1 );
salva_vettore ( v1 , dim1 );

cout << "Lettura vettore da file.\n\n";
leggi_da_File ( v2 , dim2 );
stampa_vettore ( v2 , dim2 );

cout << "Vettore inserito da tastiera.\n\n";
stampa_vettore ( v1 , dim1 );

system("PAUSE");
return 0;
}

void leggi_vettore (vettore& a , int& s)
{
do {
cout << "Scegliere la dimensione del vettore ( max "<<nmax<<" elementi) : ";
cin >> s;
cout << endl;
if ( s==0 || s > nmax) cout << "Numero di elementi non accettato!Riprova...\n\n";
} while ( s==0 || s>nmax ) ;

for ( int i=0; i<s ; i++) {
cout << "Elemento " << i+1 << " : ";
cin >> a[i];
cout << endl;
}
}

void salva_vettore (const vettore& a , const int size)
{
cout << "Salvataggio in corso...\n\n";
ofstream out ("vettore.txt");
for (int i=0 ; i<size ; i++) out << a[i] << " ";
system("PAUSE");
cout << "\n\nSalvataggio effettuato con successo!!!\n\n";
out.close();
}

void leggi_da_File (vettore& a, int& size)
{
size = 0;
ifstream in ("vettore.txt");
if(in) {
while( in >> a[size]) size++ ;
}
in.close();
}

void stampa_vettore (const vettore& a, const int size)
{
for (int i=0 ; i<size ; i++) cout << a[i] << " ";
cout << endl << endl;
}




per la scelta devi creare un menu di questo tipo:




do {
stampaMenu();
cin >> c;
cin.ignore();

switch (c) {
case '1':
//funzione1;
break;
case '2':
//funzione2;
break;
case '3':
break;
default:
cout << "Scelta non valida.\n";
break;
}
} while (c != '3');

return 0;
}

void stampaMenu() {
cout << endl;
cout << "1. Funzione1" << endl;
cout << "2. Funzione2" << endl;
cout << "3. Esci" << endl;
cout << endl;
cout << "Scelta: ";
}



Spero di aver capito il tuo problema e di averti aiutato!! :ciauz:

Loading