Stránka 1 z 2
Rozdeleni pole char
Napsal: 18 čer 2023, 08:52
od Diego
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
Re: Rozdeleni pole char
Napsal: 18 čer 2023, 11:00
od SkullKeep
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.
Re: Rozdeleni pole char
Napsal: 18 čer 2023, 12:40
od Diego
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);
}
Re: Rozdeleni pole char
Napsal: 18 čer 2023, 12:46
od Diego
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.
Re: Rozdeleni pole char
Napsal: 18 čer 2023, 13:28
od SkullKeep
Promiň, ale z toho co jsi tu napsal nevím odkud načítaji data z INklav.
Re: Rozdeleni pole char
Napsal: 18 čer 2023, 13:48
od Diego
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
Re: Rozdeleni pole char
Napsal: 18 čer 2023, 13:54
od Diego
Jeste doplnim deklaraci poli:
char INklav[80];
char poleX1[3];
char poleY1[3];
char poleX2[3];
char poleY2[3];
Re: Rozdeleni pole char
Napsal: 18 čer 2023, 14:09
od gilhad
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)
Re: Rozdeleni pole char
Napsal: 18 čer 2023, 14:37
od SkullKeep
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);
}
Re: Rozdeleni pole char
Napsal: 18 čer 2023, 15:10
od Diego
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