Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem C - strtol praca z retazcami

Dobre ranko neviete mi poradit s fukciou strtol? Viem ze meni retazec cisiel na premennu typu int a aj ze z ktorejkolvek sustavy do desiatkovej ale ako zistim ked mam napriklad retazec cisiel 100113 a dam sustavu dvojkovu cize n=2 program ma upozorni a vypise do premennej chybnyZnak cislo 3 a napise cislo co sa mu podarilo premenit. Ako ale zistim na ktorom mieste chybne cislo retazca bolo a aka cast cisla bola vyuzita na premenu? A ak chybne cislo v retazci nieje ako zapisem iba cislo co to naslo bez vypisania chybneho cisla ked neexistuje? Co mam dat do if?

Předmět Autor Datum
string si musis parsovat sam
MM.. 19.03.2014 09:12
MM..
Alebo strtol ma aj pointer na endpointer, tak ti oznami kde skoncil.
MM.. 19.03.2014 09:15
MM..
diky s tym uz dufam nieco spravim :)
Hilfiger 19.03.2014 09:35
Hilfiger
Nevies kde tu mozem mat chybu?? chcel som zistit na kolkej cifre nasiel program nepovolene cislo dal…
Hilfiger 19.03.2014 10:51
Hilfiger
Ked sem nevlozis kompletny zdrojak aj deklaracie aj ze co to je pocetPrvkov a odkial mas hodnotu tak…
MM.. 19.03.2014 14:05
MM..
ked testujes znak tak musis testovat s *chybnyZnak ptz chybnyZnak je char* if(*(znakyPole+i) == *ch…
MM.. 19.03.2014 14:07
MM..
A kvoli citatelnosti sa nepise *(povoleneZnaky+i) ani *(znakyPole+i) ale povoleneZnaky[i] a znakyPol…
MM.. 19.03.2014 14:10
MM..
Ten zdrojak je dost velky a komplikovany to by sa ti nechcelo urcite lustit ale mam problem ze chcem…
Hilfiger 19.03.2014 18:01
Hilfiger
char *pChybnyZnak; char *znakyPole = "123nejakeznaky"; cislo=strtol(znakyPole,&pChybnyZnak,n); print…
MM.. 19.03.2014 18:18
MM..
jaj uz chapem diky :) poslední
Hilfiger 19.03.2014 18:25
Hilfiger

Nevies kde tu mozem mat chybu?? chcel som zistit na kolkej cifre nasiel program nepovolene cislo dalej ake cislo tym padom premiena.

cislo=strtol(*znakyPole,&chybnyZnak,n);
printf("%d\n",cislo);
if(chybnyZnak[0]!='\0')
{
for(i=0;i<pocetPrvkov;++i)
{
*(povoleneZnaky+i)=*(znakyPole+i);
if(*(znakyPole+i)==chybnyZnak)
{
printf("V cisle %s bol na pozicii %d zisteny nepovoleny znak:%c",*znakyPole,i,*chybnyZnak);
printf("Na prevod bola vyuzita len cast cisla %s. Ziskane cislo:%d",povoleneZnaky,cislo);
}
}
}

Ked sem nevlozis kompletny zdrojak aj deklaracie aj ze co to je pocetPrvkov a odkial mas hodnotu tak sa neda ani jasnovidecky dedukovat ze kde mas jaku chybu. Kde mas chybu ti vypise compiler alebo to dedukujes podla spravania prograu.
chybnyZnak musi byt deklarovany ako
char* chybnyZnak;

naco tam mas ten for cyklus som nepochopil, priamo *chybnyZnak je ten chybny znak.

ked testujes znak tak musis testovat s *chybnyZnak ptz chybnyZnak je char*

if(*(znakyPole+i) == *chybnyZnak)

Do strtol sa nedava ziadne dereferencia ale priamo pointer na string
cislo=strtol(znakyPole,&chybnyZnak,n);

Lepis bez rozmyslania nahodne nejake hviezdicky, ved ti compiler musi pisat na kazdom riadku error. bud vies co tymi hviezdickami robis alebo to nerob vobec.

Ten zdrojak je dost velky a komplikovany to by sa ti nechcelo urcite lustit ale mam problem ze chcem vediet na akom mieste v retazci sa ten zly znak nachadza skusal som to cez strchr ale ta chce smernik toho retazca ale ja ho mam ako smernik na smernik lebo to mam vo funkcii tak vobec neviem ako by som tu polohu zanku dokazal zistit

char *pChybnyZnak;
char *znakyPole = "123nejakeznaky";

cislo=strtol(znakyPole,&pChybnyZnak,n);
printf("Chybny znak: %c na pozicii %d\n", *pChybnyZnak, pChybnyZnak-znakyPole);

P.S: a nemas ziaden smernik na smernik. Len do parametra ho vytvoris pomocou & aby mohla ta funkcia ten pChybnyZnak (smernik na char) zmenit.

Zpět do poradny Odpovědět na původní otázku Nahoru