Wyswietlanie zawartosci pliku od pewnego miejsca. Gdzie popełniłem błąd w kodzie?
Ostatnio zmodyfikowano 2013-05-22 21:52
sprd123 Temat założony przez niniejszego użytkownika |
Wyswietlanie zawartosci pliku od pewnego miejsca. Gdzie popełniłem błąd w kodzie? » 2013-05-19 21:15:49 Witam! Mam w programie zrobic odczyt pliku od pewnego miejsca. Niestety cos nie chce działać. Nie będe się rozpisywał. Wkleję kod i jeżeli ktoś jest na tyle miły i chętny , niech udzieli mi jakiejś wskazów gdyż musze to zrobić na jutro na labolatoria. Chodzi mi o funkcję wczyta() #include <iostream> #include <fstream> #include <string> using namespace std;
struct dane { string imie, nazwisko; float stan_konta; };
void utworz_plik() { int i = 1; dane a; char znak; ofstream dane( "dane.bin", ios::binary ); do { cout << "Osoba " << i << ":" << endl << endl; cout << "Podaj imie:" << endl; cin >> a.imie; cout << "Podaj nazwisko:" << endl; cin >> a.nazwisko; cout << "Podaj stan konta:" << endl; cin >> a.stan_konta; cout << endl << endl; dane.write(( char * ) & a, sizeof( dane ) ); cout << "Czy chcesz wprowadzic kolejna osobe? , T/t" << endl << endl; cin >> znak; i++; } while( znak == 'T' || znak == 't' ); dane.close(); }
void dopisz_osobe() { dane b; int i = 1; char znak; fstream dane( "dane.bin", ios::binary | ios::app ); do { cout << "Osoba " << i << endl << endl; cout << "Podaj imie:" << endl; cin >> b.imie; cout << "Podaj nazwisko:" << endl; cin >> b.nazwisko; cout << "Podaj stan konta:" << endl; cin >> b.stan_konta; cout << endl << endl; dane.write(( char * ) & b, sizeof( dane ) ); cout << "Czy chcesz podac kolejna osobe? , T/t" << endl << endl; cin >> znak; i++; } while( znak == 't' || znak == 'T' ); dane.close(); }
void wyswietl() { int numer; dane c; cout << endl << endl; cout << "Od ktorej osoby chcesz wyswietlic baze? (podaj numer):" << endl; cin >> numer; fstream dane( "dane.bin", ios::binary | ios::in ); dane.seekg(( numer - 1 ) * sizeof( dane ), ios::beg ); while( !dane.eof() ) { dane.read(( char * ) & c, sizeof( dane ) ); if( dane.good() ) { cout << "Imie:" << endl; cout << c.imie; cout << "Nazwisko:" << endl; cout << c.nazwisko; cout << "Stan konta:" << endl; cout << c.stan_konta; } } dane.clear(); dane.close(); }
int main() { int wybor, ilosc; cout << "Witaj w programie!" << endl << endl << endl; cout << "Wybierz:" << endl; cout << "[1] - aby utworzy nowa baze danych" << endl; cout << "[2] - aby dopisac osoby do bazy danych" << endl; cout << "[3] - aby wyswietlic dane osob z bazy od podanego numeru" << endl; cout << "[4] - aby zapisac do pliku tekstowego dane tych osob" << endl; cout << " ,ktorych stan konta jest wiekszy lub rowny od zadanego progu" << endl; cin >> wybor; cout << endl << endl; switch( wybor ) { case 1: utworz_plik(); break; case 2: dopisz_osobe(); break; case 3: wyswietl(); break; case 4: default: cout << "Niewlasciwy wybor!" << endl << endl; } return 0; }
|
|
Monika90 |
» 2013-05-19 21:21:37 dane.write(( char * ) & a, sizeof( dane ) ); |
W ten sposób nie można zapisywać struktur, które zawierają std::string, było o tym na forum całkiem niedawno. |
|
sprd123 Temat założony przez niniejszego użytkownika |
» 2013-05-19 21:28:11 Tak faktycznie, zanim napisalas to udalo mi sie do tego dojsc. Ale niestety dalej nie dziala: zmienilem strukture: struct dane { char imie[ 20 ]; char nazwisko[ 20 ]; float stan_konta; };
W sensie juz program sie nie blokuje ale pokazuje jakies krzaczki :( Oczywiscie wiem, ze mozna to zrobic inaczej ale ja chce uzyc funkcji seekg, seekp, tego od nas wymagaja :( Prosze o pomoc :) |
|
DejaVu |
» 2013-05-22 21:52:57 Zarzuć poprawionym kodem, bo tak na pierwsze scrollnięcie wygląda poprawnie (uwzględniając zmianę std::string na char[20]). |
|
« 1 » |