[ Salgeras @ 14.07.2005. 10:33 ] @
Skoro sam poceo da ucim C (uzeo sam knjigu od Ritchie i Kernighan) i ima jedan zadatak o kopiranju datoteka koji ne kapiram najbolje:

-Napisati prog. koji svoj ulaz kopira u svoj izlaz znak po znak:


Code:

#include <stdio.h>
main()
{
  int c;
  c=getchar();
  while (c != EOF) 
   {
     putchar(c);
     c=getchar();
    }
}
 
  


Koliko sam ja razumeo, ovaj program ispisuje ono sto ja unesem sa tastature. E sad, buni me ovo "End Of File". Program se ponavlja sve dok unet karakter se ne poklopi sa EOF. Ne razumem, koja je to vrednost? Koji je to "kraj fajla"?

Znaci, da li moze neko da mi objasni ovaj red: while (c != EOF) ?

Hvala i pozdrav!!
[ NrmMyth @ 15.07.2005. 01:23 ] @
EOF je moguce postici nekom kombinacijom tipaka, ali nisam siguran.
Sa EOF-om neces imati problema sa datotekama, jer one automatski imaju EOF na kraju.
Ali na standardnom ulaznom toku ne znam kako unijeti taj signal, sad to zanmima i mene ... :)
[ NastyBoy @ 15.07.2005. 03:00 ] @
Na Win/Dos-u je Enter pracen sa Ctrl+Z
Na *nixima je, chini mi se, Ctrl+D
[ mito61 @ 15.07.2005. 10:16 ] @
Vidi ovako,
programski jezik C je nastao još 1973 godine, kada je Ritchie ceo kernel Unix-a napisao u jeziku C. To EOF kojim se bakćeš je zaostavština iz tih vremena i u Unix-u ima vrednost CtrlD. E sad, ovaj program neće iskočiti kada pritisneš CtrlD: jednostavno, uzmi neki karakter za izlazak iz programa (recimo taser q, nešto kao quit).
While petlja koju pominješ: while ( c != EOF) se čita ovako: izvršavaj telo petlje (to je ono putchar i getchar) sve dok pritisnuti taster nije jednak EOF (znači, znak uzvika i jednakost se čita: nije jednako).
Evo koda (EOF smo zamenili sa tasterom 'q'):

while ( c != 'q' )
{
putchar ( c );
c = getchar ();
}
Znači, sve dok ne pritisneš taster 'q', program (odnosno, petlja) će prikazivati na ekranu svaki, od tvoje strane, uneti taster.
Preporučujem ti da u svim primerima gde se koristi EOF isti zameniš sa 'q', ili nekim drugim tasterom.
Inače, ovaj primer može da se napiše i drugačije (bez c=getchar() ispred while petlje):

while ( ( c = getchar () ) != 'q' )
putchar ( c );

Eto, u jednom redu.

Pozdrav,
Mito.
[ Salgeras @ 15.07.2005. 12:10 ] @
Ahaaa, tako znaci!! OK, sad sam razumeo!!

Hvala puno, Mito!!

Pozdrav.
[ NastyBoy @ 15.07.2005. 12:56 ] @
Ipak ti pogledaj ovo : http://www.comsc.ucok.edu/~pcarter/faq/common-c-errors.html#4.