Načtení vstupu do jedné proměnné pomocí getchar – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Načtení vstupu do jedné proměnné pomocí getchar – C / C++ – Fórum – Programujte.comNačtení vstupu do jedné proměnné pomocí getchar – C / C++ – Fórum – Programujte.com

 

Thomasso0
Newbie
3. 10. 2011   #1
-
0
-

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.

Nahlásit jako SPAM
IP: 80.188.117.–
KIIV
~ Moderátor
+43
God of flame
3. 10. 2011   #2
-
0
-

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)

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Thomasso0
Newbie
3. 10. 2011   #3
-
0
-

no tak jsem to myslel, prostě U_LONG_MAX nebo jak to je :)) pardon za nepřesné vyjádření

Nahlásit jako SPAM
IP: 80.188.117.–
KIIV
~ Moderátor
+43
God of flame
3. 10. 2011   #4
-
0
-

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... )

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Thomasso0
Newbie
3. 10. 2011   #5
-
0
-

No potřebuju udělat v podstatě scanf pomocí getchar... dejme tomu uživatel zadá vstup 151518701 a já potřebuju udělat vstup = 151518701, ale mám zakázáno používat scanf.

Nahlásit jako SPAM
IP: 80.188.117.–
KIIV
~ Moderátor
+43
God of flame
3. 10. 2011   #6
-
0
-

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

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Thomasso0
Newbie
3. 10. 2011   #7
-
0
-

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.
 

Nahlásit jako SPAM
IP: 80.188.117.–
KIIV
~ Moderátor
+43
God of flame
3. 10. 2011   #8
-
0
-

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''))

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Thomasso0
Newbie
3. 10. 2011   #9
-
0
-

!!! seš borec, díky moc :) stačilo udělat:

znak = getchar();

while (znak != '\n')
{
vstup = 10*vstup + (znak - '0');  // k promenne vstup postupne pridavame rady
znak = getchar();
}
Nahlásit jako SPAM
IP: 80.188.117.–
KIIV
~ Moderátor
+43
God of flame
3. 10. 2011   #10
-
0
-

#9 Thomasso
samozrejme lepsi je vyuzit iswhite() ... napriklad:   while ( !iswhite( znak=getchar() ) )  nebo jeste i pridat kontrolu jestli to nevraci EOF

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Krocan
~ Anonymní uživatel
9 příspěvků
5. 10. 2011   #11
-
0
-

Školní projekty by se asi neměly řešit zde, navíc docela riskuješ obvinění z plagiátorství, když si někdo zkopíruje tebou uvedený kód. To asi potom nebude moc FIT (VUT).

Nahlásit jako SPAM
IP: 147.229.220.–
Thomasso0
Newbie
5. 10. 2011   #12
-
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.

Nahlásit jako SPAM
IP: 80.188.117.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 13 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý