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?