On 5 Sep 02, at 1:43, gerst=tippnet.co.yu wrote:
> Hello coder,
>
> Talaltam egy erdekes forrast ami nagyon ossze-visszanak tunik az
> egesz (legalabbis nekem :) ), de miutan lefutattam, nem hittem a
> szememnek...hogy ez a kod ezt csinalja, ha lenne valaki aki egy
> kicsit kielemezgetne a dolgokat az igazan jo lenne,
Van sok elvadult ember, aki ilyeneket talál ki :) Nem magyarazom el,
legalabbis most nem, inkabb kuldok egy modositott valtozatot, amiben
kicsit atbuheraltam az eredetit:
#include <stdio.h>
main(t,_,a)
char *a;
{
return!0<t?t<3?main(-79,-12,a+main(-87,1-_,main(-86, 0,
!a||a+main(-87,-27,a-1))+a)):1,t<_?main(t+1,_,a):3,main(-94,-25+t, a
)&&t == 2 ?_<12 ?main ( 2, _+1, "%*s %8s\n" ):8:13:t<0?t<-72?main(_,
t," @?~}<5c;:/.*][a./%inm[5./[?[?i./m5%5./Q]c*[?./c](?./\
(ni<ba./3])a./[5%i[5./%in[a./c5s5b*./@-5..54@?~}<5c;:/c5s5b*|)?@\
-ab?1:c5?b*|3a@-ab?;:/%in[a4|b*n)?)?;:/[5%i[54|45[;@45[;@45[;:/3]\
)a4|!5)5)5;:/(ni<ba4|ma,;@ma,;@ma,;:/c](?4|sns?s?;:/Q]c*[?4|(?b(?c\
];:/m5%54|mnQ@)?3b?c;:/[?[?i|!a[m5.?;:/%inm[54|%inQ;@%inQ;@%inQ;:\
/.*][a4|[n.m?[a.*1:[?m5@[n..*a4;@5(5i@.*][a4;: \
</@-?i?m!?/45sni@-?b@5s*}54p::/5c,as*a..@?}54#:/")
:t<-50?_==*a ?putchar(a[31]):main(-65,_,a+1):main((*a == '/')+t,_,a\
+1):0<t?main(-88,-28,a-main(2,2,0)):*a=='/'||main(0,*a>='|'?main(-98
,'|'-24-*a,"%s"):main(-61,*a, ",@%5s;!c+b*(#-p[Q])<=3.14?\
main:f ceg,bl:nyd.v!kpuhzEjt;marosi\n"),a+1);
}
Annyit tennek hozza, hogy azert nem ekezetes betukkel irja ki a
verset, mert linux alatt meg win alatt mas a karakterkeszlet, az
egyik elvezhetetlen lenne. Meg egy megjegyzes: a legnagyobb
valtoztatas azert kellett bele, mert ebben a versben az utolso
verszak mashogy vegzodik, mint az elso tiz. Ettol kicsit hosszabb a
kod, mint a my true love-os eredeti.
István (A vezetéknevem benne van a kodban :))
|
Szia!
> > Ui: Szegyen, gyalazat the elfelejtettem, hogy C-ben hogy
> > lehet beolvasni a standard inputrol (ha pontatlanul
> > fogalmaztam, akkor bocsanat),
> getchar() v. getch() parameterezesre mar nem emlexem:)
Megfelel, ha egy karaktert akarsz beolvasni. Parametere nincs, visszateresi
erteke
a karakter ASCII kodja. Sorvegeig a gets() hivas olvas be, de sztem
beolvasasilag
legpraktikusabb scanf() hivast alkalmazni.
> > konkretan, hogy ha
> > parancssorbol akarok parametert adni a programomnak,
> > mondjuk egy file-t, akkor azt hogy olvasom be?
> main(int argc, char* argv[])
> argc: az argv-ben levo stringek szama (minimum egy: a programod neve)
> argv: a stringekre mutato pointerek (az elso a programod neve)
Igen, csakhogy a < vagy << utani reszt nem kapja meg a program parameterben,
hanem a file.kiterjesztes lesz a program stdinje. Errol a shell gondoskodik.
Ebbol az elobb leirt modokon lehet olvasni. EOF-ig.
> > valahogy igy
> > kepzelem, hogy program.exe << file.kiterjesztes - ekkor
> > hogy ferek hozza a a file tartalmahoz, ami egy sztring lesz.
> fopen(), parameterezes megint nuku:) (csak winapi)
Elobb is irtam, ezt a filenevet te soha nem kapod meg. 'stdin' lesz a
filemutatod,
illetve 0 a filedeszkriptorod amibol olvasgathatsz.
> > . Illetve az sem ugrik be, hogy hogyan konvertalok
> > kulonbozo valtozokat (azaz "12" -> 12).
"12"-rol 12-re az atoi() hivas hasznalhato, amely a parametereben megkapott
stringet
(char*) megprobalja intte alakitani.
--
Hofferek Attila >
GPG public key: http://WiZARD.DunaNet.hu/~hofi/gpgkey-hofi.asc
|