Reklama tekstowa
Odżywki, Hotele Zakopane, Katalog Stron, Cb Radio President, Usługi Komputerowe Słupsk902 903
Artykuł: C++ - Pokonywanie błędów
Programista idealny?
Jak wiadomo nikt nie jest idealny, każdy programista popełnia błędy, dlatego trzeba uważnie pisać każdy kawałek kodu, zwracać uwagę nawet na to, że nie wszyscy będą chcieli używać programu zgodnie z naszym zaleceniem. Warto się zabezpieczać. W tym artykule opiszę jakie błędy są najcześciej popełniane przez programistów oraz jak zabezpieczać swoje programy.
Najczęstrze błędy
Nie da się skompilować programu, który jest błednie napisany. Dlatego gdy popełniamy błędy w kodzie, C++ Builder wskazuje je nam i podaje wskazówkę, jak je naprawić. Najprostrzym przykładem jest zastosowanie funkcji ShowMessage:
ShowMesage("Treść komunikatu");

Wskazywanie błędów przez C++ Buildera
C++ Builder ma wbudowany Debuger, dzięki któremu pokazuje nam m.in. błędy w aplikacji. Nie dość, że kursor wskaże nam miejsce występowania błędu, to jeszcze zostaniemy przeniesieni do danej linii, zostanie ona zaznaczona na czerwono, a pod oknem kodu pokaże się okienko ze wskazówką czego bład dotyczy. W tym przypadku wskazówka mówi nam "Call to undefined function 'ShowMesage'". Jest to często spotykany błąd, ponieważ zabrakło jednej literki "s":
ShowMessage("Treść komunikatu");
Teraz już wszystko działa jak powinno. Drugim często spotykanym błędem w funkcjach jest pisanie wszystkiego z małych liter, np.:
int zmienna; zmienna = strtoint(Edit1->Text);
Nie sposób mi przedstawić wszystkich rodzajów takich błędów - są nimi jeszcze np. brak średnika na końcu procedury - takich rzeczy trzeba się pilnować.
Złośliwi użytkownicy - czyli program idiotoodporny
Przedstawię teraz jak mogą wpłynąć na nasz program złośliwi użytkownicy i jak się przed nimi zabezpieczyć. Otwórzmy teraz program z naszą pętlą, gdzie wyświetlało się 30 pozycji. Dodajmy funkcję, która po wybraniu elementu wyświetli nam go z listy. Usuńmy pętlę i dodamy 5 pozycji na listę (typu "pozycja1", "pozycja2" itd.). Dzięki poniższej procedurze uda się to zrobić:
int zmienna;
zmienna = lista->ItemIndex + 1;
ShowMessage("pozycja" + IntToStr(zmienna));
int zmienna;
zmienna = lista->ItemIndex + 1;
if (zmienna == 0) {
ShowMessage("Wybierz pozycję z listy!");
}
else {
ShowMessage("pozycja" + IntToStr(zmienna));
}
Stwórzmy teraz nowy program. Potrzebne nam będą komponenty takie jak Edit (o nazwie "pole"), Button (o nazwie "OK") oraz Label (z tekstem "Podaj liczbę od 1 do 5"). Całość może wyglądać tak:
Forma aplikacji
Teraz sama procedura, która wyświetli nam liczbę wpisaną w pole tekstowe:
void __fastcall Tforma::przyciskOKClick(TObject *Sender)
{
int zmienna;
zmienna = StrToInt(pole->Text);
ShowMessage(zmienna);
}
void __fastcall Tforma::przyciskOKClick(TObject *Sender)
{
int zmienna;
zmienna = StrToInt(pole->Text);
if (zmienna <= 0) {
ShowMessage("Podana liczba jest mniejsza lub równa od 0. Podaj liczbę z przedziału 1-5");
}
else if (zmienna > 5) {
ShowMessage("Podana liczba jest większa od 5. Podaj liczbę z przedziału 1-5");
}
else {
ShowMessage("Podana liczba z przedziału 1-5 to: " + IntToStr(zmienna));
}
}
Ala Kalkulator 2Pierwsze co rzuca się w oczy to brak przyciska OK, ale można sobie poradzić bez niego. Najlepiej zrobić tak, aby wraz ze zmianą działania obliczał się wynik. Zaznaczamy więc naszą listę rozwijalną "dzialanie" i wybieramy z zakładki zdarzeń (Events) w Inspektorze Obiektów akcję OnChange:
Akcja OnChangeCzas napisać procedurę:
void __fastcall TForm1::dzialanieChange(TObject *Sender)
{
int pierwszaliczba, drugaliczba; pierwszaliczba = StrToInt(liczba1->Text); drugaliczba = StrToInt(liczba2->Text); if (dzialanie->Text == "Dodawanie") { wynik->Text = pierwszaliczba + drugaliczba; } else if (dzialanie->Text == "Odejmowanie") { wynik->Text = pierwszaliczba - drugaliczba; } else if (dzialanie->Text == "Mnożenie") { wynik->Text = pierwszaliczba * drugaliczba; } else if (dzialanie->Text == "Dzielenie") { wynik->Text = pierwszaliczba / drugaliczba; } else { ShowMessage("Wybierz działanie z listy!"); } }
void __fastcall TForm1::dzialanieChange(TObject *Sender)
{
int pierwszaliczba, drugaliczba;
if (liczba1->Text == "") {
ShowMessage("Podaj pierwszą liczbę");
}
else if (liczba2->Text == "") {
ShowMessage("Podaj drugą liczbę");
}
else if (liczba1->Text == "" && liczba2->Text == "") {
ShowMessage("Podaj dwie liczby!");
}
else {
pierwszaliczba = StrToInt(liczba1->Text);
drugaliczba = StrToInt(liczba2->Text);
if (dzialanie->Text == "Dodawanie") {
wynik->Text = pierwszaliczba + drugaliczba;
}
else if (dzialanie->Text == "Odejmowanie") {
wynik->Text = pierwszaliczba - drugaliczba;
}
else if (dzialanie->Text == "Mnożenie") {
wynik->Text = pierwszaliczba * drugaliczba;
}
else if (dzialanie->Text == "Dzielenie") {
wynik->Text = pierwszaliczba / drugaliczba;
}
else {
ShowMessage("Wybierz działanie z listy!");
}
}
}
void __fastcall TForm1::dzialanieChange(TObject *Sender)
{
int pierwszaliczba, drugaliczba;
try {
if (liczba1->Text == "") {
ShowMessage("Podaj pierwszą liczbę");
}
else if (liczba2->Text == "") {
ShowMessage("Podaj drugą liczbę");
}
else if (liczba1->Text == "" && liczba2->Text == "") {
ShowMessage("Podaj dwie liczby!");
}
else {
pierwszaliczba = StrToInt(liczba1->Text);
drugaliczba = StrToInt(liczba2->Text);
if (dzialanie->Text == "Dodawanie") {
wynik->Text = pierwszaliczba + drugaliczba;
}
else if (dzialanie->Text == "Odejmowanie") {
wynik->Text = pierwszaliczba - drugaliczba;
}
else if (dzialanie->Text == "Mnożenie") {
wynik->Text = pierwszaliczba * drugaliczba;
}
else if (dzialanie->Text == "Dzielenie") {
wynik->Text = pierwszaliczba / drugaliczba;
}
else {
ShowMessage("Wybierz działanie z listy!");
}
}
}
catch (Exception &exception) {
ShowMessage("Podana wartość jest tekstem! Musisz podać liczbę!");
}
}
Ten artykuł nie pokazuje jak ustrzedz się przed wszystkimi błędami, ponieważ wiele z nich występuje w bardziej zaawansowanych aplikacjach. Część druga, która pokaże więcej sposobów na zabezpieczanie się przed błędami, ukaże się wtedy, gdy pojawią się artykuły o większej aplikacji. Następny artykuł pokazuje jak dzięki C++ stworzyć prostą grę - strzelankę. Będzie to gra, której nie znajdzie się nigdzie w internecie - bo własna.
Dodano: 5 marca 2006, Wróć do "Zmienne, warunki i pętle" - Idź do "Gra strzelanka"



















