C++ builder 2010 i błąd w funkcjonowaniu programu


(Sebastianp88) #1

Witam wszystkich

mam nietypowy problem z którym nie mogę sobie poradzić. Otóż postanowiłem pobawić się najnowszą wersją borlanda - C++ builder 2010 proffesional. Stworzyłem zwykły projekt vcl i użyłem 3 przycisków (button) oraz jednego paska edycji (TEdit);

tak przedstawia się kod

void __fastcall TForm1::Button1Click(TObject *Sender)

{

	String tmp;

	int i = 0;

	int j = 0;

	tmp = Edit1->Text;

	while(tmp[i] != '\0')

	{

		if(isdigit(tmp[i]))

				++j;

		++i;

	}

	Label3->Caption = tmp;

	Label4->Caption = j;

}

Uprzejmie proszę moderatorów o przymknięci oka na wstawienie tak krótkiego kodu w znaczniki Code a nie w obowiązujący sposób

Po skompilowaniu programu i wprowadzeniu dowolnego ciągu znaków - w tym cyfr jak i liter - w TEdit i wciśnięciu przycisku licz dostaję taki o to komunikat

Do funkcji isdigit() korzystam z pliku nagłówkowego cctype. Będę wdzięczny za pomoc przy rozwiązaniu problemu


([alex]) #2

W Builderze string i String to są różne typy.

String ma indeksację od 1 czyli pierwszy znak to tmp[1], poza tym niema gwarancji że ostatni znak będzie równy '\0'.

   int j=0;String tmp=Edit1-Text;int i=tmp.Length();i0;--i) if(isdigit(tmp[i])) ++j;Label3-Caption=tmp;Label4-Caption=IntToStr(j); [/code]