Integer ako premenná na načítavanie znakov – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Integer ako premenná na načítavanie znakov – C / C++ – Fórum – Programujte.comInteger ako premenná na načítavanie znakov – C / C++ – Fórum – Programujte.com

 

Cpl
~ Anonymní uživatel
3 příspěvky
16. 5. 2016   #1
-
0
-

Ahoj,čítam knihu C od Ritchieho a Kernighana a narazil som na program, v ktorom načitávajú znak pomocou premennej ktorá je Integer. Je to tu vysvetlené ako char nemôžeme použiť,pretože z musí byť dostatočne velká na to,aby pojala EOF plus akýkoľvek možný char. preto používame int .
Zaujímajú ma 2 otázky.Za prvé,ako je možné že dokáže načítať znak aj do int premennej..viem,že každý znak má nejaké číslo v ASCII tabuľke.To akože si ten prekladač uloží číselnú hodnotu znaku a potom ho naspäť konvertuje na znak? 2. Moc som neporozumel tomu vysvetleniu,viem čo je EOF ,teda no,viem že je to koniec súboru,ale aj tak nerozumiem ,ako má pojať EOF. Vďaka za odpovede

int z;
z=getchar();
while (z!=EOF){
	putchar(z);
	z=getchar();
}
Nahlásit jako SPAM
IP: 91.127.183.–
KIIV
~ Moderátor
+43
God of flame
16. 5. 2016   #2
-
0
-

Znak je jen cislo, jediny prevod je v tom, ze se ti zvetsi maximalni velikost toho cisla (z -128 do 127 u znaku se znamenkem nebo 0 az 255 u bezznamenkoveho na velikost integeru) - proste z 8bitu se to rozsiri na velikost 2B/4B/8B podle architektury procesoru a prekladace

EOF je jen hodnota, ktera se do samotneho znaku nevejde (jelikoz by neslo poznat, jestli to nakonec je znak nebo ne)

Nahlásit jako SPAM
IP: 94.113.93.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Cpl
~ Anonymní uživatel
3 příspěvky
16. 5. 2016   #3
-
0
-

Je možné takto načítavať znak aj v iných C-čkovských jazykoch? Hodnota EOF je väčšia ako 255 keď sa tam nezmestí? :-)

Nahlásit jako SPAM
IP: 91.127.183.–
KIIV
~ Moderátor
+43
God of flame
16. 5. 2016   #4
-
0
-

#3 Cpl
proto se pouziva int, aby se veslo :)

Treba v C++ muzes znaky nacitat do char, protoze stav je v ramci objektu uchovan. Pokud nacitani selze, nastavi se vnitrni priznaky chyby a hodnota promenne, do ktere se nacita, se nezmeni. Zaroven se da udelat i

if (std::cin >> znak) ...

jelikoz istream implementuje pretizeny operator pretypovani na bool (no kdyz to po sobe ctu, tak to asi nepochopis)

Nahlásit jako SPAM
IP: 94.113.93.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Cpl
~ Anonymní uživatel
3 příspěvky
16. 5. 2016   #5
-
0
-

No to mas pravdu,nepochopil som    prečo mi potom na mojom PC výpis EOFu hádže -1? Líši sa to na každom PC? Zatiaľ mi stačí asi že sa to dá aj v iných jazykoch :-)

Nahlásit jako SPAM
IP: 91.127.183.–
KIIV
~ Moderátor
+43
God of flame
16. 5. 2016   #6
-
0
-

V intu budes mit normalni hodnoty 0-255 pro znaky a hodnoty mimo tento rozsah, napriklad EOF budou mimo tento rozsah. Pokud pak hodnotu znaku pretypujes na char (obvykle je to se znamenkem, tak se 0-255 zmeni na 0 az 127 a -128 az -1  no a pokud neosefujes eof, tak ten se take pravdepodobne zmeni na -1 = 0xFF z puvodni -1 0xFFFFFFFF ci podobne)

Nahlásit jako SPAM
IP: 94.113.93.–
Program vždy dělá to co naprogramujete, ne to co chcete...
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, 116 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ý