Getchar() a EOF – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Getchar() a EOF – C / C++ – Fórum – Programujte.comGetchar() a EOF – C / C++ – Fórum – Programujte.com

 

dreamer0
Newbie
8. 7. 2007   #1
-
0
-

Ahojte, je vubec mozne, aby v tomto prikladu nastala situace ze by fce getchar() vratitla hodnotu EOF?

#include <stdio.h>


main()
{
int z;

while ((z = getchar()) != EOF) {
putchar(z);
}
}


Tento priklad je opsan z knihy Programovací jazyk C (K&R) a uprimne ho moc nechapu. Konkretne nechapu testovani promenne z na hodnotu EOF. V knize se pise ze while ziska znak, priradi ho do promenne z a zkontroluje, zda se nejedna o znak signalizujici konec souboru. Pokud ne, je vykonano telo cyklu, ktere znak vepise. Potom se cyklus opakuje. Dosahneme-li konce vstupu, cyklus while skonci a s nim i funkce main...

Jak dosahnout konce vstupu? Nemuzu si pomoc, ale proste mi tento priklad nefunguje jak by mel, cyklus nejde nijak opustit. Leda ze bych dostal EOF do promenne z jinym zpusobem. Název tohoto prikladu je "Kopirovani souboru" ale nechapu proc, co to s tim ma vlastne spolecneho? V dokumentaci jsem se docetl ze fce getchar() cte znak z standardniho vstupu (stdin) kterym by mela byt klavesnice ne? Na cteni ze souboru jsou prece jine fce treba getc().

V dalsim prikladu (Pocitani radku) se pise ze ma program spocitat radky na vstupu. U cteni ze souboru si to dovedu predstavit, ale pri vstupu s klavesnice? Jak chtete napsat vice radku? Prece radek ukonceny prvnim znakem noveho radku (ENTEREM) zpusobi ukonceni zadavani.

#include <stdio.h>


main()
{
int z, pr;

pr = 0;
while ((z = getchar()) != EOF)
if (z == '\n')
++pr;
printf("%d\n", pr);
}


Nicmene tento priklad zpusobi to, ze vas program nuti v nekonecnem cyklu zadavat dalsi a dalsi znaky. Tedy jinak, z cyklu nelze opet nijak vyskocit!

Mozna delam neco spatne a proto to pisu sem? Mohl by mi nekdo prosim vas poradit?

Nahlásit jako SPAM
IP: ...–
trulyAnonymous
~ Anonymní uživatel
1 příspěvek
9. 7. 2007   #2
-
0
-

EOF pri vstupe z klavesnice dosiahnes (minimalne v DOS/Win) stlacenim Ctrl+Z alebo F6.
So subormi mozes pracovat napr. takto: binarka.exe < vstupnySubor
alebo takto: binarka.exe < vstupnySubor > vystupnySubor

Nahlásit jako SPAM
IP: ...–
dreamer0
Newbie
9. 7. 2007   #3
-
0
-

EOF pri vstupe z klavesnice dosiahnes (minimalne v DOS/Win) stlacenim Ctrl+Z alebo F6.


Jj diky moc funguje...

V Unixu kombinaci CTRL+D viz. http://en.wikipedia.org/wiki/End-of-file. Jeste jednou moc dik.

Nahlásit jako SPAM
IP: ...–
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, 24 hostů

Podobná vlákna

C getchar EOF — založil Poki

Getchar() - ukonceni EOF a \n — založil cp.Hook

Uziti cin.eof() — založil vyhnanek

Ifstream čte i po EOF ?! — založil Eatel

EOF a načítání vstupů — založil kuba748

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ý