Zdravím,
potřeboval bych načíst libovolně dlouhé číslo (po \n nebo když bude vstup obsahovat např. písmena, vyhodit chybu) do proměnné typu long pomocí getchar. Mohli byste mi poradit? :)
Díky moc.
do long libovolne dlouhe cislo v zivote nedostanes... maximalni cislo bude 2^31-1 a minimalni -2^31
(pripadne kdyz to budes testovat na 64b systemu tak nejspis o 32bitu vetsi)
no kazdopadne co potrebujes? cyklus, zjistit jestli je to znak 0-9, znat prevody ciselnejch soustav (tady desitkova na desitkovou) a pripadne vypsat chybu kdyz narazis na znak jinej nez 0-9 (a pripadne mezera jako ukonceni... )
no tak... jestli znas aspon naznakem prevody soustav tak vis ze ti vyjde neco takovyho:
y = 0
y = 10*y + '1'-'0' // y == 1
y = 10*y + '5'-'0' // y == 15
y = 10*y + '1'-'0' // y == 151
y = 10*y + '5'-'0' // y == 1515
.......
dokud nenarazis na whitespace (bily znak) - ukonceni nebo jiny znak nez cislo nebo bily znak -> chyba
Ok, udělal jsem tohle:
while (!isspace(znak))
{
znak = getchar();
vstup = 10*vstup + (znak - '0');
}
Funguje to, ale na konci to udělá nesmyslně ještě nějaký výpočet, takže finální výstup je chybný. Vypisoval jsem si to printf("%ld\n", vstup) po každém kroku v cyklu a vracelo to asi tohle:
Vstup: 54861
5
54
548
5486
54861
548572
Absolutně nechápu, čím by to mohlo být... Jinak výborný nápad s převodem soustav jako takovým, myslím, že to ještě hodněkrát využiju :) Díky.
tak si ted predstav ze mas uz 5486 a zrovna mas na vstupu znak '1' -->
nactes znak '1' do promenne znak
vstupu priradis desetinasobek predchoziho vstupu a pripoctes k nemu rozdil mezi znakem '0' a '1'
ted se vratis na zacatek while ... znak je '1' tj. podminka plati neni to mezera
nactes do znaku - tentokrate uz mezeru
od mezery odectes hodnotu znaku '0' a samozrejme prictes k deseti nasobku vstupu....
-- nejaky dalsi dotaz ? :D
EDIT: jeste to vypada ze tam nemas mezeru ale enter (znak 10 ascii) proto tech -38 (10-48(tj. 0''))
Já řeším obecné vlastnosti jazyka, v podstatě je to to samé jako kdybych to vyčetl z knížky, akorát když mi to někdo vysvětlí, tak to pochopím líp než z té knížky. Příklad je ilustrační, není to tak jak to bude vypadat v onom projektu. Po nikom nežádám, aby mi napsal kód, jen jsem potřeboval nasměrovat. To se doufám může :-) Projekty samozřejmě řeším sám a tohle byla poslední záchrana, když jsem opravdu nevěděl, jak na to.
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku