Black friday Black friday
Aprílový black friday tě nenechá v klidu! Až 80 % prémiového obsahu zdarma. Více informací

Diskuze: C - ověření vstupu čísla

C a C++ C a C++ C - ověření vstupu čísla American English version English version

Aktivity (1)
Avatar
Martin Tahadlo:3.12.2018 10:05

Ahoj,

snažím se ošetřit vstup pouze pro celá čísla.

Pro načítání stringu využívám fgets (musím - nesmím použít scanf). Chtěl bych aby cyklus prošel string a rozhodl, jestli se jedná o číslo nebo ne.

Zkusil jsem: Pokoušel jsem se použít isdigit a podobně, ale nemůžu na nic přijít.

Chci docílit: Potřebuji aby mi to nevzalo číslo z takového stringu : 12ws2s5 a nebo aby to nevyhazovalo 0 (při zadání písmen).

Dokáže někdo poradit?

 
Odpovědět 3.12.2018 10:05
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Martin Tahadlo
DarkCoder:3.12.2018 11:41

Možností je spousta. Konverzi řetězce na číslo lze provést pomocí funkcí:

atoi(), atol(), _atoi64(), strtol(), sscanf(), isdigit() popř. si napsat vlastní funkci.

To nejpodstatnější je aby se číslo vešlo do návratového typu.

Nahoru Odpovědět 3.12.2018 11:41
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
Avatar
Pedro
Člen
Avatar
Pedro:3.12.2018 12:42

C jsem nikdy moc nedělal, ale pokud tomu rozumim (a opravte mě jestli se mýlím) tak v momentě kdy bys zkoušel parsovat cokoliv s textem do číselnýho datovýho typu tak dostaneš error, kterej můžeš ošetřit pomocí nějakýho C ekvivalentu try, catch bloku.

Delší varianta by asi byla si string rozdělit na jednotlivý znaky do pole, pole projít cyklem a v každý iteraci daný znak srovnávat se sadou číslic pomocí podmínky (což by byl vnořený cyklus).

 
Nahoru Odpovědět 3.12.2018 12:42
Avatar
naheCZ
Člen
Avatar
naheCZ:3.12.2018 14:59

V C jsem vždy používal funkci strtol(). U této funkce poznáš, zdali je v řetězci jen číslo nebo číslo následované nějakým jiným znakem.

 
Nahoru Odpovědět 3.12.2018 14:59
Avatar
Odpovídá na naheCZ
Martin Tahadlo:4.12.2018 10:38

Děkuji. Nakonec jsem strtol použil.

 
Nahoru Odpovědět 4.12.2018 10:38
Avatar
Jirka
Člen
Avatar
Odpovídá na Martin Tahadlo
Jirka:4.12.2018 14:36

Ahoj,

až ti to bude fungovat, neboj se označit řešitele, který poradil nejlépe.

Nahoru Odpovědět  +1 4.12.2018 14:36
Kdo nic nedělá, nic nezkazí.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.