Autor Zpráva
happymaster23
Profil *
Zdravím,

dostal se ke mě takový zajímavý kousek kódu, který mi měl něco vzkázat. Zdá se mi však, že se jeho autor trošičku sekl a výsledkem běhu nebude nic, chci vás proto jako neprogramátor požádat o vyvrácení nebo potvrzení mé domněnky. Pozn.: Na správnost syntaxe nehleďte, jedná se mi pouze logickou funkci.

int i = 0;
const char text[] = {0×65,0×6C,0×65,0×21,0};
while(text[i] != 0)
printf(text[i++]);


Děkuji za odpovědi
igamenir
Profil
zaprvé bych řekl že to není php,
za druhé by to fungovat mohlo, pokud tam není nějaká chyba kterou nevidím, a to tak, že to v cyklu projde pole text a vypíše ho po písmenách. to je celé. Text je "ele!"
happymaster23
Profil *
No jak říkám, ani nevím co to mělo být, ale PHP to podobné je. Jde mi o to, jestli se ta smyčka vůbec provede, když si do "i" uložíme nulu a podmínkou pro provedení té smyčky je, aby to číslo nebylo rovné nule...
Měsíček
Profil
Co se týče logické funkce - měl by tento (nejspíše C/C++ úryvek) fungovat.
Měsíček
Profil
Ve skutečnosti by to mohlo probíhat jako "nastav proměnnou 'i' typu int a přiřaď do ní hodnotu '0', pak vytvoř další proměnnou, která bude konstantou a bude pole typu char do char se poté dávají znaky - zde je to řetězec ukončený 0, pak bude smyčka, která bude vypisovat jednotlivé písmena tak dlouho dokud nenarazí na konec řetězce (tedy na 0) kdyby tam nebyla ta podmínka text[i] != 0 nejspíše by program zamrzl.
Alphard
Profil
šlo by to přepsat do PHP, převod a výpis

<?php
$t = array ("0×65","0×6C", "0×65", "0×21");
foreach ($t as $k)
echo chr (hexdec ($k));
?>


výsledkem bude ele! (jak již psal igamenir)
jinými slovy, fungovat to může

dostal se ke mě takový zajímavý kousek kódu, který mi měl něco vzkázat
to bude asi celá pointa, vzkaz je "zakódovaný" do (pro většinu lidí nečitelných) 0x65 atd.
happymaster23
Profil *
Díky za vysvětlení, takže ta smyčka neměla sloužit k opakovanému výpisu toho pole, ale k tomu aby to celé pole postupně vypsala.

Takže ještě jednou díky
bohyn
Profil
No ja myslim ze to fungovat nebude protoze:
1) 0×65 neni platne hexadecimalni cislo (za nulou ma byt "x" ne ten paznak - 0x65).
2) printf ma v C/C++ jinou syntax - ocekava minimalne dva parametry
happymaster23
Profil *
A co kdyby to bylo C#?
Měsíček
Profil
Není.
Lander
Profil *
Fungovat to opravdu bude.
A printf v C ocekava jen jeden parametr a dalsi jsou nepovinne.
Stejne jako v PHP je i v c++ rozdil mezi printf a sprintf. Zatimco printf ocekava jen jeden parametr a vypysuje text do konzole,
sprintf vypysuje text do retezce, ktery vsak musi byt prvnim parametrem fce.

printf: http://msdn.microsoft.com/en-us/library/wc7014hz.aspx
sprintf: http://msdn.microsoft.com/en-us/library/ybk95axf(VS.71).aspx
fprintf: http://msdn.microsoft.com/en-us/library/xkh07fe2.aspx

Probehne to jen jednou, protoze promenna i zde slouzi jen jako pocitadlo, ktere ukazuje pozici v poli a je pri kazdem cteni pole v cyklu inkrementovana tak dlouho dokud nedosahne polozky pole obsahujici 0, coz nastane uplne na konci.
Tento kod je ANSI C/C++.
BTW pocitam ze ten paznak co ma byt x je pouze vysledkem nejakeho formatovani (pravdepodobne pri kopirovani kodu z nejake diskuze, prispevku, komentare, citace,... ).
CSharper
Profil *
C# to vazne neni. Tam bz nasledujici uryvek vypadal:

int i = 0;
char[] text = new char[]{0×65,0×6C,0×65,0×21,0};
while(text[i] != 0)
Console.Write(text[i++]);
Lander
Profil *
A C# to opravdu neni. Bylo by to asi nejak:

int i = 0;
char text[] = new char[]{0×65,0×6C,0×65,0×21,0};
while(text[i] != 0)
Console.Write(text[i++]);
Lander
Profil *
Heh nekdo me predbeh :D

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0