Wypisywanie danych ze struct do pliku- problem z zapisem.
Ostatnio zmodyfikowano 2015-08-08 16:52
SquashPL Temat założony przez niniejszego użytkownika |
Wypisywanie danych ze struct do pliku- problem z zapisem. » 2015-08-04 18:49:16 Witajcie Na ten moment mam taki kod. Nie wiem jednak jak powiązać struct z funkcją zapisz. Siedzę już nad tym trochę i nie wiem jak to ogarnąć. Pomożecie? #include <iostream> #include <cstdlib> #include <fstream>
using namespace std;
struct dane { char miejscowosc[ 25 ]; char nrdomu[ 25 ]; char imie[ 25 ]; char nazwisko[ 25 ]; };
void zapisz()
{ std::fstream plik; plik.open( "plik.txt", std::ios::in | std::ios::out ); if( plik.good() == true ) { std::string baza; for( int i = 0; i <= 2; i++ ) { getline( std::dane[ i ] ) plik.write( & baza[ 0 ], baza.length() ); } plik.close(); } int main() { dane tab[ 2 ]; for( int i = 1; i <= 2; i++ ) { cout << "Podaj dane" << i << "ucznia" << endl; cout << "Podaj miejscowosc" << endl; cin >> tab[ i ].miejscowosc; cout << "Podaj nr domu" << endl; cin >> tab[ i ].nrdomu; cout << "Podaj imie" << endl; cin >> tab[ i ].imie; cout << "Podaj nazwisko"; cin >> tab[ i ].nazwisko; } zapisz(); } } |
|
bombatom69 |
» 2015-08-04 20:12:21 Nie chcę Cię martwić ale źle to wygląda. Nie rozumiesz wielu spraw. 1. Skąd funkcja [zapisz] ma "wiedzieć" czym są dane? 2. [zapisz] działa na rzecz obiektów klasy dane i może być metodą 3. Ciało main również wskazuje na to, że operacje tam wykonywane (pobranie danych od użytkownika) mogłoby być zawarte w metodzie W istocie nie łączysz w ogóle struktury z resztą kodu. Nie korzystasz z jej dobrodziejstw. Idea ogólna jest taka: struct dane{ //tutaj twoje pola void zapisz(); void pobierz(); };
void dane::zapisz(){ // tutaj zapis, ale musi być przemyślany }
void dane::pobierz(){ // tutaj pobieranie które robisz w main - potrzebne pewne zmiany }
|
|
pekfos |
» 2015-08-04 20:57:56 Co main() robi w funkcji zapisz()? Zapis binarnyW istocie nie łączysz w ogóle struktury z resztą kodu. Nie korzystasz z jej dobrodziejstw. |
A musi..? |
|
bombatom69 |
» 2015-08-08 01:39:06 Sorry pekfos ale czytam już nie pierwszy Twój post i prawie każdy doprowadza mnie do wniosku, że coś z Tobą jest nie tak. Daruję sobie tę wątpliwą przyjemność obcowania z Tobą. Życzę dobrego samopoczucia.
|
|
Maciek |
» 2015-08-08 13:18:37 Ok, nie lubicie się :). Ale wracając do tematu, faktycznie struktura może zawierać "luźny zbiór danych", ale autor napisał, że "nie może powiązać z funkcją zapisz [...]" w takim wypadku od razu nasuwa mi się jednak konieczność włączenia funkcji czytających / zapisujących do struktury z danymi. Kod zaczynał by wtedy przypominać bardzie C++ niż "spagetti", gdzie wszystko znajduje się wsz ędzie i może każdy ma dostęp do wszystkiego, dodatkowo twoje dane zabezpieczył bym jako prywatne. |
|
pekfos |
» 2015-08-08 13:33:15 Ale wracając do tematu, faktycznie struktura może zawierać "luźny zbiór danych", ale autor napisał, że "nie może powiązać z funkcją zapisz [...]" w takim wypadku od razu nasuwa mi się jednak konieczność włączenia funkcji czytających / zapisujących do struktury z danymi. |
Może to również powiązać przekazując wskaźnik/referencję na strukturę jako argument do funkcji - to powinien znać i rozumieć. To też rozwiązanie. Nie musi prowadzić do kodu spaghetti, a struktura pozostaje "luźnym zbiorem danych", jeśli tylko się tego chce. Zamiast tylko sugerować i podawać obiektowe podejście, odeślijcie do odpowiedniego kursu. Niewiele da same rozwiązanie za kogoś problemu, używając nieznanych dla niego technik. |
|
carlosmay |
» 2015-08-08 14:03:27 Tablica struktur dane tab[ 2 ]; nie jest przekazana do zapisz() . Funkcja jej nie zna więc nie możesz na niej operować. |
|
bombatom69 |
» 2015-08-08 16:52:49 carlos: to właśnie była kluczowa część wiadomości ode mnie. Ten kod nie ma prawa się skompilować.
Wracając do dyskusji o obiektowości, czy jest konieczna czy nie. Obiektowość to wykroczenie poza C do domeny C++, więc faktycznie nie zawsze trzeba jej chcieć. Tutaj jednak pytający korzysta już z bibliotek, które pod zwykłym C są niedostępne. Wniosek jest taki, że o ile nie ma on jakichś szczególnych planów to warto jest pójść w stronę C++. |
|
« 1 » |