Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Da li mozete da mi objasnite ovo??

[es] :: C/C++ programiranje :: Da li mozete da mi objasnite ovo??

[ Pregleda: 3004 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Salgeras
Salgeras

Član broj: 21155
Poruke: 180
*.ptt.yu.



Profil

icon Da li mozete da mi objasnite ovo??14.07.2005. u 10:33 - pre 228 meseci
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!!
Registered Linux User #460193
 
Odgovor na temu

NrmMyth
Ivan Maček
Split

Član broj: 63456
Poruke: 849
*.cmu.carnet.hr.

Sajt: www.dump.hr


Profil

icon Re: Da li mozete da mi objasnite ovo??15.07.2005. u 01:23 - pre 228 meseci
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 ... :)
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.plus.com.



+4 Profil

icon Re: Da li mozete da mi objasnite ovo??15.07.2005. u 03:00 - pre 228 meseci
Na Win/Dos-u je Enter pracen sa Ctrl+Z
Na *nixima je, chini mi se, Ctrl+D
 
Odgovor na temu

mito61
Milovan Ivanovic
Beograd

Član broj: 63605
Poruke: 17
62.108.108.*



Profil

icon Re: Da li mozete da mi objasnite ovo??15.07.2005. u 10:16 - pre 228 meseci
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.
 
Odgovor na temu

Salgeras
Salgeras

Član broj: 21155
Poruke: 180
*.ptt.yu.



Profil

icon Re: Da li mozete da mi objasnite ovo??15.07.2005. u 12:10 - pre 228 meseci
Ahaaa, tako znaci!! OK, sad sam razumeo!!

Hvala puno, Mito!!

Pozdrav.
Registered Linux User #460193
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.in-addr.btopenworld.com.



+4 Profil

icon Re: Da li mozete da mi objasnite ovo??15.07.2005. u 12:56 - pre 228 meseci
Ipak ti pogledaj ovo : http://www.comsc.ucok.edu/~pcarter/faq/common-c-errors.html#4.

 
Odgovor na temu

[es] :: C/C++ programiranje :: Da li mozete da mi objasnite ovo??

[ Pregleda: 3004 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.