• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Notatnik w C++. Zamykanie programu - pytanie o zapisanie pliku.

Object Storage Arubacloud
0 głosów
741 wizyt
pytanie zadane 14 kwietnia 2017 w C i C++ przez delta_pavonis Początkujący (300 p.)
Witam

Przerobiłem 8 odcinek obiektowego C++, przede wszystkim wyrazy uznania dla Pana Mirosława za przygotowywanie tak świetnych materiałów do nauki. To niewątpliwie kosztuje mnóstwo czasu i wysiłku, po prostu udostępnianie takich materiałów edukacyjnych, to wręcz heroizm.

Ok, co do samego notatnika, napisanego na podstawie filmu, to wszystko działa bez zarzutów. Chciałem dodać nieco funkcji i postanowiłem zrobić takie coś, żeby przy zamykaniu aplikacji, oprócz pytania czy na pewno zamknąć, pytał też o to czy zapisać zmiany w pliku.

Zrobiłem to tak, że jeżeli nazwa pliku jest pusta, to pojawia się komunikat, że plik nie jest zapisany.... i generalnie odsyłam do funkcji zapisz jako, a po zapisaniu Aplication->Terminate(). Natomiast jeśli plik jest już zapisany, to chciałbym, żeby przy zamykaniu aplikacji pytał czy zapisać zmiany, ale tylko wtedy jeśli rzeczywiście coś zmienię lub dopiszę. A jeśli nie, to po prostu ma zamknąć i nie pytać o zapis.

Wiem, że można po prostu w między czasie zapisywać (Ctrl+S), ale często tak jest, że mamy zapisany plik, coś dopiszemy i zapomnimy zapisać, a naciśniemy już zamykanie programu. No można też zapisywać zmiany przy zamykaniu bez pytania, ale jakoś mnie nie zadowala takie rozwiązanie. Może i skuteczne (bezpieczne), ale zbytnia łatwizna.

Ja wymyśliłem sobie, że utworzę dwie zmienne typu string. Jedna będzie przyjmowała stan (wartość) zastany przy każdorazowym użyciu funkcji zapisz, a druga - do niej non stop będzie dopisywany tekst (wszelkie zmiany) i w funkcji zakończ, chciałem zrobić porównanie tych zmiennych, czyli jeśli nie są równe tzn że trzeba zapisać zmiany, a gdy są równe to nie pytać o zapis.

Generalnie pogubiłem się trochę z tym jak w ogóle ugryźć temat tych zmiennych. Żeby jeszcze bardziej nie komplikować mojego problemu, nie będę już przytaczał moich (i tak nieudanych) rozwiązań.

Chciałem jedynie zapytać czy dobrze kombinuję i ewentualnie prosić o jakieś naprowadzenie pod kątem składni C++.

Z góry serdecznie dziękuję za wszelką pomoc.

Pozdrawiam
2
komentarz 14 kwietnia 2017 przez Raymond.Z Obywatel (1,800 p.)
Nie wystarczy utworzyć jakiejś zmiennej typu bool np fileIsSaved, której stan będziesz zmieniał przy wpisywaniu przez użytkownika znaków na false, a przy zapisywaniu na true?
komentarz 18 kwietnia 2017 przez delta_pavonis Początkujący (300 p.)
Serdecznie dziękuję za odpowiedź. W sumie nie pomyślałem o tym. Dobry pomysł.

Raz jeszcze dziękuję. Będę próbował.
komentarz 18 kwietnia 2017 przez Raymond.Z Obywatel (1,800 p.)
Proszę bardzo i powodzenia w dalszej pracy :-)
komentarz 20 kwietnia 2017 przez delta_pavonis Początkujący (300 p.)
Doszedłem do tego jak to powinno być. Wiem, że to pewnie żaden wyczyn, ale ja w C++Builderze dopiero raczkuję, więc proszę mi ewentualnie wybaczyć mój zachwyt. Podpowiedź o zmiennej logicznej była jak najbardziej słuszna, ale czegoś mi brakowało i nie mogłem ruszyć z miejsca. Oczywiście była to metoda pola Memo, którą zaimplementowałem w funkcji zapisz_jako oraz zapisz. A w funkcji Zakończ sformułowałem warunek sprawdzający wartość logiczną.

Konkretnie to jest tak:

W funkcjach od zapisywania, dodałem taką linijkę:

tresc -> Modified = false;

Natomiast w funkcji zakończ, taki warunek:

if(tresc -> Modified == true)

to ma pytać czy zapisać zmiany.
komentarz 20 kwietnia 2017 przez Raymond.Z Obywatel (1,800 p.)
No jest bardzo okej, ogólnie jak masz jakieś zmienne typu bool i zależy Ci sprawdzić czy jest prawdą to raczej unikamy porównania do true, czytelniejszy kod wtedy będzie, a sama zmienna reprezentuje sobą wartość logiczną. Kolejna sprawa jeśli chcesz negować wartość logiczną np chciałbyś coś robić, gdy tresc nie została zmodyfikowana to nie rób tego zapisaem if(!(tresc -> Modified)), tylko raczej wtedy porównujemy wartość do false co jest równoważne z negacją, ale taki zapis jest dużo bardziej czytelniejszy.

Czyli powinno to wyglądać mniejwięcej tak if(tresc -> Modifier == false).

Ogólnie w zależności od tego co planujesz robić dalej z programowaniem, polecałbym zostać i się zgłębić w c++ lub też zmienić język na taki, który trochę bardziej rozwinie Twoje skrzydła ;-)
komentarz 22 kwietnia 2017 przez delta_pavonis Początkujący (300 p.)
Jestem właśnie na etapie nauki programowania. W bardzo zdecydowany sposób postanowiłem iść w tym kierunku. Od października uczęszczam na kurs programowania. To był taki mój pierwszy krok. Kiedyś na studiach mieliśmy trochę programowania w ramach technologii informacyjnej (tak nazywał się przedmiot) ale to było parę godzin w turbo pascalu, a ja studiowałem mechanikę. Po studiach programowałem trochę obrabiarki CNC, ale to jest inna bajka, to bardziej jest świat projektowania części z zastosowaniem CAD. Na wspomnianym kursie, jak to na kursie mamy wszystkiego po trochę. Trochę C++, trochę PHP, JS, był też MySQL, oczywiście HTML i CSS, teraz zaczynam przygodę z językiem Java. Bardzo podoba mi się programowanie, chociaż ciężko jest tak na początku ogarnąć wszystko tym bardziej, że jak wspomniałem zacznę jeden język i zanim się rozkręcę to już następny nowy. Oczywiście staram się samodzielnie kontynuować naukę w domu. W sumie uparłem się, że chciałbym tak w dobrym stopniu opanować C++ (od niego zaczynaliśmy kurs) a przynajmniej przerobić wszystkie podstawy, żeby móc powiedzieć, że chociaż jeden język mam tak w miarę kompletnie opanowany. Podoba mi się też PHP i teraz właśnie Java. Tak myślę, że jak nie uda mi się znaleźć jakiejś pracy dla początkujących w najbliższym czasie, to po skończeniu kursu, te trzy języki chciałbym tak na tip top opanować, no i szukać dalej możliwości rozwoju.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
2 odpowiedzi 397 wizyt
0 głosów
1 odpowiedź 186 wizyt
0 głosów
1 odpowiedź 576 wizyt
pytanie zadane 9 sierpnia 2019 w Python przez Ventre90 Obywatel (1,170 p.)

92,584 zapytań

141,434 odpowiedzi

319,671 komentarzy

61,968 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...