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

Kopiranje ulaza u izlaz

[es] :: C/C++ programiranje :: Kopiranje ulaza u izlaz

Strane: 1 2

[ Pregleda: 5031 | Odgovora: 22 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

VukSta
Vuk Stankovic
Novi Sad

Član broj: 102879
Poruke: 33
*.inffo.net.



Profil

icon Kopiranje ulaza u izlaz23.09.2006. u 16:18 - pre 214 meseci
#include <stdio.h>

int c;

main()
{
c= getchar();
while (c != EOF)
{
putchar (c);
c = getchar ();
}


return 0;
}


Jednostavan zadatak iz Ricijeve knjige,ali nesto ne razumem.zasto mi ne dozvoljava da unos bude u dva ili vise redova,zasto odmah pri pritisku na ENTER,prestaje sa unosom i kopira to sto sam do tada uneo u izlaz?zar kraj programa ne bi trebalo da oznaci ctrl+z,a ne ENTER?
 
Odgovor na temu

NrmMyth
Ivan Maček
Split

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

Sajt: www.dump.hr


Profil

icon Re: Kopiranje ulaza u izlaz23.09.2006. u 16:38 - pre 214 meseci
Koji kompajler, meni na DevCpp 4.9 radi korektno.
 
Odgovor na temu

djalfirevic

Član broj: 76932
Poruke: 497
*.dynamic.sbb.co.yu.



Profil

icon Re: Kopiranje ulaza u izlaz23.09.2006. u 18:08 - pre 214 meseci
Citat:
VukSta: #include <stdio.h>

int c;

main()
{
c= getchar();
while (c != EOF)
{
putchar (c);
c = getchar ();
}


return 0;
}


Jednostavan zadatak iz Ricijeve knjige,ali nesto ne razumem.zasto mi ne dozvoljava da unos bude u dva ili vise redova,zasto odmah pri pritisku na ENTER,prestaje sa unosom i kopira to sto sam do tada uneo u izlaz?zar kraj programa ne bi trebalo da oznaci ctrl+z,a ne ENTER?


Mozda je negde kasnije u knjizi objasnjeno zasto. Mozda je Dennis Ritchie hteo da ENTER bude EOF!?
 
Odgovor na temu

VukSta
Vuk Stankovic
Novi Sad

Član broj: 102879
Poruke: 33
*.inffo.net.



Profil

icon Re: Kopiranje ulaza u izlaz23.09.2006. u 18:55 - pre 214 meseci
Radim u Codeblocks -u.ne znam kako da pogledam koji mi je kompajler:(
@djalfirevic
ne verujem da je EOF=ENTER,sudeci po kasnijim primerima,u kojima je EOF ctrl+z.
 
Odgovor na temu

Tiristor
Skola/obrazovanje

Član broj: 102849
Poruke: 184
*.inffo.net.



Profil

icon Re: Kopiranje ulaza u izlaz24.09.2006. u 05:55 - pre 214 meseci
probaj umesto inta da stavis char i posle u okviru while c stavi pod navodnicima.
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.smin.sezampro.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: Kopiranje ulaza u izlaz25.09.2006. u 14:23 - pre 214 meseci

Ovako, komandom getchar() ucitavas neki niz u bafer stdio-a dok se vrednost prvog unetog elementa vraca(tip je int) i pozicija unutar bafer se postavlja na 2. znak po redu. dakle ako se unese "toxi", 't' ce biti vraceno a pozicija unutar bafera postavljena na znak 'o'. U bafer ce se smestiti svi znaci koje si otkucao pre ENTER tj.prelaska u novi red ali ce se u bafer smestiti i taj simbol za novi red( '\n' ). Dakle u pitanju je nacin baferovanja stdin-a, dakle on se baferuje u redove.
Kada se u while petlji dodje na f-ju getchar, za razliku od prvog puta program nece cekati da se nova vrednost unese dok se god u baferu nalaze znaci. Kada se oni svi prikazu (tj pozicija unutar bafera pokazuje na simbol '\0') uslov petlje je i dalje vazeci i zato ti program trazi da uneses novi tekst.


-Vidi, unesi "REC" i pritisni ctrl + z. Nista se nece desiti dok ne pritisnes enter. Onda ce se ispisati "REC", prelazi se u novi red i program se zatvara. Dakle tekst se programu "predaje" po pritisku na enter, to je ustaljeno ponasanje.
Kao slucija, mozes sve snimati u jednu promenljivu char[ 1000 ] pa po nailasku na EOF znak to sve prikazati.
 
Odgovor na temu

Tiristor
Skola/obrazovanje

Član broj: 102849
Poruke: 184
*.inffo.net.



Profil

icon Re: Kopiranje ulaza u izlaz25.09.2006. u 21:44 - pre 213 meseci
Aha u tome je stvar. Ja sam uvek imao problema sa tim getcharom i u principu gledao sam da ga izbegavam. Dobar je kada treba da uneses neki niz sa belim znacima, ali kada sam ga koristio za unos 1 karaktera imao sam problema. Sve je u redu kad pretisnes 1 karakter, ali ako slucajno pritisnes vise on taj jedan dodeli promenjivoj, a ove ostale dodeljuje sledecem stringu koji treba da se unese. Najveci problem je bio sto dodeljuje i enter, pa kad imam getchar, a zatim i unos sa konverzijom %s on mi taj unos preskoci, jer na getchar unosi znak koji treba, a enter ostaje za sledeci string koga pokupi %s i prekine mi unos.
 
Odgovor na temu

NrmMyth
Ivan Maček
Split

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

Sajt: www.dump.hr


Profil

icon Re: Kopiranje ulaza u izlaz26.09.2006. u 09:48 - pre 213 meseci
sve je to tako jer je IO stream
 
Odgovor na temu

VukSta
Vuk Stankovic
Novi Sad

Član broj: 102879
Poruke: 33
*.inffo.net.



Profil

icon Re: Kopiranje ulaza u izlaz27.09.2006. u 17:45 - pre 213 meseci
@toxi_programer
Hvala na pomoci!
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.smin.sezampro.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: Kopiranje ulaza u izlaz27.09.2006. u 19:39 - pre 213 meseci
@VukSta
- Ovo mi je zapalo za oko jer sam i ja kada sam ucio C naisao na isti problem, pitao sam i niko da da konkretan odgovor svi kao "zaobidji getchar()..." idr...
-No ako koristis getchar za uzimanje samo jednog znaka od korisnika( tesko da ces doci u pomenutu situaciju ali valja znati) posle poziva getchar() pozovi f-ju fflush( neki_tok ) gde je neki_tok npr stdin ili koji vec hoces da "ispraznis".
 
Odgovor na temu

VukSta
Vuk Stankovic
Novi Sad

Član broj: 102879
Poruke: 33
*.inffo.net.



Profil

icon Re: Kopiranje ulaza u izlaz28.09.2006. u 20:28 - pre 213 meseci
Imam jos jedno pitanje u vezi getchar.Mozda nisam dobro razumeo,pa me sada ovo buni.U onom primeru koji sam naveo,tekst se kopira odmah pri pritisku na ENTER,Enter daje znak da program pocne da se izvrsava.
Ali u drugom primeru,ENTER nije taj koji ce okoncati unos (kao u primeru gore),vec ctrl + z,kao sto bi i trebalo.
moje pitaje je: koja je sad razlika izmedju ova dva koda,odnosno zasto je u prvom primeru ENTER signal za izvrsetak programa,au drugom je to EOF?
evo koda:

#include <stdio.h>
main()
{
double i;


for(i=0; getchar()!=EOF; ++i);

printf("%.0f",i);


}

program broji znakove.

Hvala!
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.smin.sezampro.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: Kopiranje ulaza u izlaz29.09.2006. u 14:03 - pre 213 meseci
Ne znam koji kompajler koristis ali u ovom primeru koji si naveo imas EOF, to je makro i ima vrednost -1. Ja kad u VS6 izvrsim ovaj kod, dal stisno il' ne stisko ctrl + z isto mi se vata, a ako izmenim program da na mestu EOF stoji '\n' sve radi kako treba tj. uneses jednom rec i dobijes broj slova a u onom tvom slucaju upisujes u nedogled.

-Da se malo ispravim, ako imas kompajler iz vremena dos-a, npr Turbo C, onda ce se tretman kraja fajla iz navedenog primera ispostovati, jer ti prevodioci navedenu komandu tako interpretiraju.

PS. Enter bi okoncavao unos ako stavis umesto EOF '\n' ( cisto da potvrdim jos jednom gore napisano)
pozz
 
Odgovor na temu

VukSta
Vuk Stankovic
Novi Sad

Član broj: 102879
Poruke: 33
*.inffo.net.



Profil

icon Re: Kopiranje ulaza u izlaz29.09.2006. u 18:16 - pre 213 meseci
Citat:
toxi_programer:

PS. Enter bi okoncavao unos ako stavis umesto EOF '\n' ( cisto da potvrdim jos jednom gore napisano)
pozz


Upravo tako.To mi je jasno.Ali u ovom drugom primeru,sve dok ne pritisnem ctrl + z,mogu da unosim koliko god hocu znakova i u koliko god redova hocu.
U prvom primeru,cim pritisnem ENTER,on mi iskopira to sto sam uneo.Ono sto me interesuje je zasto mi ne dopusti (u 1. primeru) da unesem nekoliko redova,i potom po pritisku na ctrl + z,da mi sve sto sam uneo iskopira u izlaz.
znam da sam mozda malo naporan oko ovoga,ali stvarno me je zaintrigiralo,jednostavno je,ali ne radi ono sto ja ocekujem :).
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.smin.sezampro.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: Kopiranje ulaza u izlaz02.10.2006. u 08:33 - pre 213 meseci
U V.S.6 i TurboC-u i prvi i drugi primer rade isto. S tim sto se U VS6 nista ne dogadja pritisno ti ctrl + z il ne pritisno. U turboC se "poštuje" ctrl + z ali sve jedno moras da pritisnes ENTER... Opet mi nisi rekao, koji kompajler koristis?
 
Odgovor na temu

VukSta
Vuk Stankovic
Novi Sad

Član broj: 102879
Poruke: 33
*.inffo.net.



Profil

icon Re: Kopiranje ulaza u izlaz02.10.2006. u 18:48 - pre 213 meseci
da,kontam da moram da pritisnem enter posle ctrl + z,ako si na to mislio.ali meni ne rade isto i prvi i drugi primer.
kod oba primera se izvrsavanje programa zavrsava sa ctrl + z,i to je korektno.ali u drugom primerumi dozvoljava da string unesem nekoliko redova,i tek po pritisku na ctrl + z mi daje rezultat.
u prvom primeru,unesem jedan red,pritisnem enter,i on mi odmah to iskopira,ne mogu da unesem string u nekolko redova,pa da mi tek onda po pritisku na ctrl + z,on prikaze ceo ulaz iskopiran u izlaz.
to je ono sto me buni.zasto mi ne dozvoljava da kompletan unos obavim u nekoliko redova,pa da mi potom iskopira sve odjednom,kad mu dam znak za zavrsetak(odnosno ctrl +z),vec mi kopira red po red.
samo mi reci da li je logicka greska,ako jeste gde gresim,a ako je do kompajlera,onda ok.
mozda treba ovako da radi,al ne znam zasto.

koristim Codeblocks,kompajler je GNU GCC.
 
Odgovor na temu

SuPeR_MaSteR
Marko Stamenković

Član broj: 88590
Poruke: 115
*.inffo.net.



Profil

icon Re: Kopiranje ulaza u izlaz04.10.2006. u 21:12 - pre 213 meseci
Mislim da je stvar u tome da ne mozes smestiti znak za novi red ('\n') u tip int i to je razlog sto ti ne dozvoljava unos u vise redova a onda ispis. Mozes to resiti uvodjenjem nizovne promenljive..
 
Odgovor na temu

NrmMyth
Ivan Maček
Split

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

Sajt: www.dump.hr


Profil

icon Re: Kopiranje ulaza u izlaz05.10.2006. u 17:57 - pre 213 meseci
Zasto ne mozes smjestiti '\n' u int??
 
Odgovor na temu

SuPeR_MaSteR
Marko Stamenković

Član broj: 88590
Poruke: 115
*.inffo.net.



Profil

icon Re: Kopiranje ulaza u izlaz06.10.2006. u 00:01 - pre 213 meseci
ASCII kod tog znaka (10) se smesta u tip int. Ali ne moze se ispisati %d ili %f konverzijom sto je on u primeru koristio...
 
Odgovor na temu

VukSta
Vuk Stankovic
Novi Sad

Član broj: 102879
Poruke: 33
*.inffo.net.



Profil

icon Re: Kopiranje ulaza u izlaz15.10.2006. u 14:34 - pre 213 meseci
ne nije problem u tome,ne vidim ni zasto bi bio.pokusao sam i da promenim kompajer,stvar se ne menja...
 
Odgovor na temu

Dejan Lozanovic
Dejan Lozanovic
Beograd

Član broj: 691
Poruke: 2325
*.beotel.net.

Jabber: null@elitesecurity.org
Sajt: speedy-order.com


+75 Profil

icon Re: Kopiranje ulaza u izlaz29.10.2006. u 19:12 - pre 212 meseci
Citat:
toxi_programer: @VukSta
- Ovo mi je zapalo za oko jer sam i ja kada sam ucio C naisao na isti problem, pitao sam i niko da da konkretan odgovor svi kao "zaobidji getchar()..." idr...
-No ako koristis getchar za uzimanje samo jednog znaka od korisnika( tesko da ces doci u pomenutu situaciju ali valja znati) posle poziva getchar() pozovi f-ju fflush( neki_tok ) gde je neki_tok npr stdin ili koji vec hoces da "ispraznis".


pa mislim da fflush nece pomoci jer getchar() "blokira" program dok ne dobije znak znaci fflush nece doci na red dok sam buffer ne bude flushovan. Jedino resenje za ove stvari je promeniti "disciplinu" samog terminala pod unix-olikim operativnim sistemima to se radi preko

Code:

#include <termios.h>
     int tcgetattr(int fd, struct termios *termios_p);


u termios_p treba ukljuciti ICANON, i tada je citanje/pisanje ide znak po znak.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Kopiranje ulaza u izlaz

Strane: 1 2

[ Pregleda: 5031 | Odgovora: 22 ] > FB > Twit

Postavi temu Odgovori

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