prosta baza danych - problem z for, zapis/odczyt txt, sprawdzenie ogólne

0

Napisałem bardzo bardzo prostą bazę danych, poniżej kod.

http://pastebin.com/yGmWSNmH

Nie obyło się bez problemów.

  1. Pętla for.

Problem jest wyświetlaniem danych malejąco. Aktualne rozwiązanie problemu działa, ale jest niezbyt eleganckie. Pętla for wyświetla elementy tablicy od ostatniego do pierwszego. Element zerowy jest dodany "ręcznie".

Gdy próbowałem z innymi warunkami, które, moim zdaniem, powinny w for() działać, program się kompilował bez błędu. Problem był już w programie. Po uruchomieniu, dodaniu kilku studentów, uruchamiałem funkcję, która wyświetla w sortowaniu malejącym (dowolną, dostępną z menu-->3 ). Wówczas, albo Windows informował o błędzie, albo komputer się zawieszał.

  1. Zapis/odczyt.

Powinna być możliwość zapisu/odczytu danych do pliku txt (ewentualnie również csv). O ile nie mam problemu z tym, gdy napiszę zwykły program, gdzie pojedyncze dane zapisywane są z vectora stringow do txt, o tyle tu nie mogę sobie poradzić. Nie wiem czy w w wypadku klas trzeba to robić jakoś inaczej ?

  1. Sprawdzenie.

Prosiłbym o napisanie, jeśli ktoś zauważy, że coś można wykonać lepiej.

0

Pomożecie ?

0

Nie i > 0 a i >= 0.
BTW. Ja już różne rzeczy próbowałem i mi Winda nigdy nie zwisła, a tobie przy tablicy tak ^^

Zapisujesz z klas to co ci się podoba, jak to zrobisz, to twoja sprawa, byle było porządnie.

Nie używaj system("pause");, a np. cin.ignore(); cin.();.

0

Ło Matko! Tyle nowych linii. Po każdej instrukcji dajesz \n. Powoduje to, że się to strasznie ciężko czyta, tak jakby każda linijka nie miała nic wspólnego z poprzednimi. Bez urazy, ale ja nie potrafię czytać tak napisanego kodu. Owszem, można stosować nowe linie między instrukcjami, które robią co innego, ale żeby po każdej instrukcji?

0

Chodzi o tą pętlę tak?

for(int i = studenci.size() - 1; i >= 0; i--)
{
    studenci[i].Dane_studenta();
}
 

Hmm.. dlaczego by nie działało z >=. W typ przypadku najmniejszy element wyświetli właśnie o indexie 0, czyli pierwszy element.

0
xeo545x39 napisał(a)

Nie i > 0 a i >= 0.
BTW. Ja już różne rzeczy próbowałem i mi Winda nigdy nie zwisła, a tobie przy tablicy tak ^^

Zapisujesz z klas to co ci się podoba, jak to zrobisz, to twoja sprawa, byle było porządnie.

Nie używaj system("pause");, a np. cin.ignore(); cin.();.

No właśnie taki warunek wstawiałem (i>=0) i "wywala błąd", teraz ponownie wstawiłem taki, "jakby co", ale jest tak samo. Wyświetla się błąd. Natomiast w oknie programu, owszem wyświetlają się np. dane_studenta wg nr w bazie malejąco, ale po ostatnim, czyli najmniejszym w tym przypadku numerze, program próbuje wyświetlić np. element 1028672852, czyli generalnie maksymalny jaki mógłby się tam zmieścić w pamięci, a który w praktyce nie został zainicjalizowany, po czym jest błąd.

Dlaczego nie system("pause") ? Chodzi o to, że nie będzie działało np. na Linuxie ?

0

Niemożliwe, sprawdź debugger'em lub po prostu dodatkowym kawałkiem kodu, po kolei ile wynosi i, musi przybrać na końcu zero.

0

Tak wygląda działanie programu, gdy warunek w for() jest taki jaki niby powinien być.

user image

"Przelatuje" o jeden raz za dużo. Dziwne.

Czy może to być problem nie z programem, a z komputerem ?

0

Problem nadal występuje. Teraz jednak udało mi się zdiagnozować problem z Code::Blocks, które nie działało bez zainstalowanego DevC++. Po prostu C::B korzystał z kompilatora DevC++. Przestawiłem w opcjach, teraz jest już normalnie.

Po tym przestawieniu kompilator raportuje błąd.

user image

Nie wiem o co chodzi. Zadeklarowałem te wszystkie funkcje w klasie jako public, zdefiniowałem również.

Co ciekawe, gdy C::B korzystał z plików Dev'a, a nie swoich, kompilowało się normalnie :D

0

Ok, czyli jakieś cuda się dzieją i nikt nie ma pojęcia o co chodzi ? :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1