Witam,
piszę programik w C++ builderze i napotkałem problem. Otóż mam pewne urządzenie, które przesyła dane do komputera przez port com w następującej postaci "12,3456 78900 " - czyli liczba, po niej spacja potem liczba i znów spacja. Tak właśnie wygląda jeden paczka danych. Program przyjmuje dane, a następnie ma zapisać np. w 2 polach Tedit. I tutaj właśnie zaczyna się problem... Po odebraniu danych zapisywane są one w zmiennej dane[14] (char). Aby wydobyć każdą z liczb - w pętli kopiuję znak po znaku do innej zmiennej kat[8] oraz wartosc[5] (obydwie char). Kiedy wyrzucam to pole Edit to w pierwszym polu zamiast np. 12,3456 pojawia się 12,3456 P¬« zaś w drugim zamiast 78900 pojawia się 0456 7~12,3456 P¬«. Ma ktoś może pomysł co źle zrobiłem?!? Kolejna zaskakująca (jak dla mnie) rzecz to wpływ wykomentowanej linijki (tj. //String napis = dane; // ???). W momencie kiedy ją odkomentuję - zmienia się działanie programu i w drugim polu edycyjnym pojawia się ©0456 $. Dlaczego? Moim zdaniem nie może to mieć wpływu na przebieg programu. Z góry dziękuję za odpowiedź.
poniżej uproszczona wersja programu (bez odbierania danych z com'a)
piszę programik w C++ builderze i napotkałem problem. Otóż mam pewne urządzenie, które przesyła dane do komputera przez port com w następującej postaci "12,3456 78900 " - czyli liczba, po niej spacja potem liczba i znów spacja. Tak właśnie wygląda jeden paczka danych. Program przyjmuje dane, a następnie ma zapisać np. w 2 polach Tedit. I tutaj właśnie zaczyna się problem... Po odebraniu danych zapisywane są one w zmiennej dane[14] (char). Aby wydobyć każdą z liczb - w pętli kopiuję znak po znaku do innej zmiennej kat[8] oraz wartosc[5] (obydwie char). Kiedy wyrzucam to pole Edit to w pierwszym polu zamiast np. 12,3456 pojawia się 12,3456 P¬« zaś w drugim zamiast 78900 pojawia się 0456 7~12,3456 P¬«. Ma ktoś może pomysł co źle zrobiłem?!? Kolejna zaskakująca (jak dla mnie) rzecz to wpływ wykomentowanej linijki (tj. //String napis = dane; // ???). W momencie kiedy ją odkomentuję - zmienia się działanie programu i w drugim polu edycyjnym pojawia się ©0456 $. Dlaczego? Moim zdaniem nie może to mieć wpływu na przebieg programu. Z góry dziękuję za odpowiedź.
poniżej uproszczona wersja programu (bez odbierania danych z com'a)
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
char dane[14] = "12,3456 00456 "; //tak przychodzą dane
//czyli 2 liczby: 12,3456 oraz 00456
char kat[7]; //tutaj będzie pierwsza liczba
char wartosc[5]; //a tutaj znajdzie się druga
int i;
String napis = dane; // ???
for (i=0; i < 8; i++)
kat[i] = dane[i]; //pętla przepisuje znak po znaku (pierwsze 7 znaków) z dane do kat
Edit1->Text = kat; //zapis zmiennej kat do pola Edit1
for (i=9; i < 14; i++)
wartosc[i-8] = dane[i]; // jak wyżej, tylko druga liczba
Edit2->Text = wartosc;
}