Ładny brzuch

Chciabym zrobi, e mona doda kilka struktur ptl do pliku binarnego i eby mona je byo odczytywa jak rekordy i operowa na nich, np. jeli zmienna a w rekordzie wynosi 1 to nie wywietlaj. Moje dotychczasowe wypociny:
#include <iostream> #include <fstream> #pragma hdrstop using namespace std; class klasa { public: int liczba; char slowo; }; int main() { // otwarcie pliku do zapisu binarnego ofstream O("binarny", ios::binary | ios::app); // wczytanie danych z klawiatury klasa tablica[2]; cout<<"Liczba: "; cin>>tablica[0].liczba; cout<<"slowo: "; cin>>tablica[0].slowo; // zapis do pliku O.write((char*)&tablica, sizeof(tablica)); O.close(); system("cls"); // otwarcie pliku do odczytu klasa tablica2[2]; ifstream I("binarny", ios::binary); for(int i=0; i<1; ++i) { I.read((char*)&tablica2[i], sizeof(tablica2)); cout<<tablica2[i].liczba<<endl; } I.close(); system("pause"); return 0; }
Niby jakie dane s zapisywane, ale poprawnie odczytywany jest tylko 1 rekord. Czego tu brakuje/jest le?




Chciabym zrobi, e mona doda kilka struktur ptl do pliku binarnego i eby mona je byo odczytywa jak rekordy i operowa na nich, np. jeli zmienna a w rekordzie wynosi 1 to nie wywietlaj. Moje dotychczasowe wypociny:
(...)
Niby jakie dane s zapisywane, ale poprawnie odczytywany jest tylko 1 rekord. Czego tu brakuje/jest le?


#include <iostream> #include <fstream> #pragma hdrstop using namespace std; class klasa { public: int liczba; char slowo; }; int main() { // otwarcie pliku do zapisu binarnego ofstream O("binarny", ios::binary | ios::app); // wczytanie danych z klawiatury klasa tablica[2]; cout<<"Liczba: "; cin>>tablica[0].liczba; cout<<"slowo: "; cin>>tablica[0].slowo; cout<<"Liczba: "; cin>>tablica[1].liczba; cout<<"slowo: "; cin>>tablica[1].slowo; // zapis do pliku O.write((char*)tablica, sizeof(tablica)); O.close(); system("cls"); // otwarcie pliku do odczytu klasa tablica2[2]; ifstream I("binarny", ios::binary); I.read((char*)tablica2, sizeof(tablica)); for(int i=0; i<2; ++i) { cout<<tablica2[i].liczba<<endl; } I.close(); system("pause"); return 0; }

1. W twojej wersji wpisywae dane tylko do pierwszego rekordu, a tworzye tablic z 2 rekordami...
2. O.write((char*)&tablica, sizeof(tablica)); <- tu jest le, poniewa jak masz tablic, to jej nazwa jest zarazem adresem jej pierwszego elementu, wic '&' by niepotrzebny.
3. To wczytywanie w ptli jest troch bez sensu i le napisane. Lepiej wczyta cay blok, skoro znasz rozmiar tablicy w pliku.
Powyszy poprawiony kod u mnie dziaa.

Dodatkowo jeszcze uywanie sizeof(tablica) nie jest jakim rewelacyjnym pomysem. Fakt, przy tablicy statycznej zwraca poprawn warto, ale ewentualne zmiany w kodzie (choby tablica alokowana przez new) i ju wszystko si posypie. Bezpieczniej jest uywa sizeof(klasa)*ilosc.

Ilo, czyli ilo elementw tablicy?




Ilo, czyli ilo elementw tablicy?

tak

Oczywicie chodzi o ilo elementw w tablicy. Nie bardzo wiem o jak inn ilo w tym kontekcie mogoby Ci chodzi ;)

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •