Rozdeleni pole char
Rozdeleni pole char
Ahoj,
Mam pole char 4 cisel oddelenych strednikem (napr. 1;1;1;1 az max. 999;999;999;999) a potrebuju ho rozdelit do 4 poli char kazde s jednou hodnotou.
Peru se s tim celi rano a nejak mi to blbne.
Poradite nekdo?
Dik
Mam pole char 4 cisel oddelenych strednikem (napr. 1;1;1;1 az max. 999;999;999;999) a potrebuju ho rozdelit do 4 poli char kazde s jednou hodnotou.
Peru se s tim celi rano a nejak mi to blbne.
Poradite nekdo?
Dik
https://arze.cz - ARduino Zapojení Elektronika
- SkullKeep
- Příspěvky: 293
- Registrován: 23 srp 2017, 18:51
- Reputation: 0
- Bydliště: Brno
- Kontaktovat uživatele:
Re: Rozdeleni pole char
No jestli ti má někdo poradit je třeba upřesnit jaké pole máš přesně na mysli a dát jsem tu část kódu, která ti hapruje. Bez toho se nedá moc pomoci.
P. Q. M.
Re: Rozdeleni pole char
void podprogram()
{
memset(poleX1, 0x00, sizeof(poleX1)); //vynuluj poleX1
memset(poleY1, 0x00, sizeof(poleY1)); //vynuluj poleY1
memset(poleX2, 0x00, sizeof(poleX2)); //vynuluj poleX2
memset(poleY2, 0x00, sizeof(poleY2)); //vynuluj poleY2
int x=5; //počítadlo
int a=0; //počítadlo
while(INklav[x] != 59) //opakuj dokud nebyl načten znak ;
{
poleX1[a] = INklav[x];
x++;
a++;
}
x++;
a=0;
while(INklav[x] != 59) //opakuj dokud nebyl načten znak ;
{
poleY1[a] = INklav[x];
x++;
a++;
}
x++;
a=0;
while(INklav[x] != 59) //opakuj dokud nebyl načten znak ;
{
poleX2[a] = INklav[x];
x++;
a++;
}
x++;
a=0;
while(INklav[x] != 59) //opakuj dokud nebyl načten znak ;
{
poleY2[a] = INklav[x];
x++;
a++;
}
Serial.println(poleX1);
Serial.println(poleY1);
Serial.println(poleX2);
Serial.println(poleY2);
}
{
memset(poleX1, 0x00, sizeof(poleX1)); //vynuluj poleX1
memset(poleY1, 0x00, sizeof(poleY1)); //vynuluj poleY1
memset(poleX2, 0x00, sizeof(poleX2)); //vynuluj poleX2
memset(poleY2, 0x00, sizeof(poleY2)); //vynuluj poleY2
int x=5; //počítadlo
int a=0; //počítadlo
while(INklav[x] != 59) //opakuj dokud nebyl načten znak ;
{
poleX1[a] = INklav[x];
x++;
a++;
}
x++;
a=0;
while(INklav[x] != 59) //opakuj dokud nebyl načten znak ;
{
poleY1[a] = INklav[x];
x++;
a++;
}
x++;
a=0;
while(INklav[x] != 59) //opakuj dokud nebyl načten znak ;
{
poleX2[a] = INklav[x];
x++;
a++;
}
x++;
a=0;
while(INklav[x] != 59) //opakuj dokud nebyl načten znak ;
{
poleY2[a] = INklav[x];
x++;
a++;
}
Serial.println(poleX1);
Serial.println(poleY1);
Serial.println(poleX2);
Serial.println(poleY2);
}
https://arze.cz - ARduino Zapojení Elektronika
Re: Rozdeleni pole char
Kdyz to spustim poprvi tak v pohode. Kdyz pak zmenim zdrojovy pole tak se to zacne michat. A pritom pole nejdriv mazu aby nedoslo ke kolizi s minulima hodnotama.
https://arze.cz - ARduino Zapojení Elektronika
- SkullKeep
- Příspěvky: 293
- Registrován: 23 srp 2017, 18:51
- Reputation: 0
- Bydliště: Brno
- Kontaktovat uživatele:
Re: Rozdeleni pole char
Promiň, ale z toho co jsi tu napsal nevím odkud načítaji data z INklav.
P. Q. M.
Re: Rozdeleni pole char
Pole char INklav se plni v jine casti programu - to neni podstatne pro tenhle podprogram. Potrebna data jsou od INklav[5] dal podle delky jednotlivych hodnot
https://arze.cz - ARduino Zapojení Elektronika
Re: Rozdeleni pole char
Jeste doplnim deklaraci poli:
char INklav[80];
char poleX1[3];
char poleY1[3];
char poleX2[3];
char poleY2[3];
char INklav[80];
char poleX1[3];
char poleY1[3];
char poleX2[3];
char poleY2[3];
https://arze.cz - ARduino Zapojení Elektronika
Re: Rozdeleni pole char
IMHO by měla ta XY12 pole být char[4] aby se tam ještě vešla ukončovací nula ( '\0' ) a po každém tom while by ještě mělo být poleX1[a]=0; (nebo poleY2[a]='\0'; nebo tak)
Protože jinak ti ty println vypíšou celé to pole do nejbližšího nulového bytu (což je kdoví kde) a hlavně ti tam po kombinaci dlouhé číslo, krátké číslo zbude ještě konec toho dlouhého čísla. (A pokud budeš mít 3znakové číslo, třeba 999, tak se ti tam bude vypisovat i to, co je v paměti za koncem toho pole)
Protože jinak ti ty println vypíšou celé to pole do nejbližšího nulového bytu (což je kdoví kde) a hlavně ti tam po kombinaci dlouhé číslo, krátké číslo zbude ještě konec toho dlouhého čísla. (A pokud budeš mít 3znakové číslo, třeba 999, tak se ti tam bude vypisovat i to, co je v paměti za koncem toho pole)
- SkullKeep
- Příspěvky: 293
- Registrován: 23 srp 2017, 18:51
- Reputation: 0
- Bydliště: Brno
- Kontaktovat uživatele:
Re: Rozdeleni pole char
Jestli to chápu dobře tak by to nohlo vypadat nějak takhle:
Kód: Vybrat vše
void podprogram()
{
memset(poleX1, '\0', sizeof(poleX1)); //vynuluj poleX1
memset(poleY1, '\0', sizeof(poleY1)); //vynuluj poleY1
memset(poleX2, '\0', sizeof(poleX2)); //vynuluj poleX2
memset(poleY2, '\0', sizeof(poleY2)); //vynuluj poleY2
byte x = 5; //počítadlo
while (INklav[x] != 59) //opakuj dokud nebyl načten znak ;
{
for (byte cislo = 0; cislo < 3; cislo++)// plnění pole
{
x = x + cislo;
poleX1[cislo] = INklav[x];
}
poleX1[3] = '\0';
x++;
}
while (INklav[x] != 59) //opakuj dokud nebyl načten znak ;
{
for (byte cislo = 0; cislo < 3; cislo++)
{
x = x + cislo;
poleY1[cislo] = INklav[x];
}
poleY1[3] = '\0';
x++;
}
while (INklav[x] != 59) //opakuj dokud nebyl načten znak ;
{
for (byte cislo = 0; cislo < 3; cislo++)
{
x = x + cislo;
poleX2[cislo] = INklav[x];
}
poleX2[3] = '\0';
x++;
}
while (INklav[x] != 59) //opakuj dokud nebyl načten znak ;
{
for (byte cislo = 0; cislo < 3; cislo++)
{
x = x + cislo;
poleY2[cislo] = INklav[x];
}
poleY2[3] = '\0';
}
Serial.println(poleX1);
Serial.println(poleY1);
Serial.println(poleX2);
Serial.println(poleY2);
}
P. Q. M.
Re: Rozdeleni pole char
Takze jestli to chapu dobre tak se mi to uklada dobre ale mrsi to to zobrazovani printem. Tak to by nevadilo, este si to overim a uvidime
Dik za rady
Dik za rady
https://arze.cz - ARduino Zapojení Elektronika
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host