C, předání hodnot zpět do funkce main

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Bari007 5. 3. 2011 12:08

Nechápu význam proměnné velikost. Vždyť velikost je to stejné, co cpocet ne? Ty ale pracuješ na několika místech i s proměnnou velikost, která kromě funkce nacteni_souboru nenabývá žádných hodnot a i v té funkci načtení souboru má stejnou hodnotu, jako cpocet. K čemu teda ta proměnná je? Nestačí pracovat jenom s cpocet?

V mainu ti chybí za returnem středník.

Zkus si to nejdřív napsat tak, abys načítal hodnoty z příkazové řádky, nepracovat zatím se souborem.

Paměť pro vstup si musíš alokovat dřív, než začneš to pole vstup naplňovat, tzn. nejdřív si zjistíš, kolik je v souboru hodnot, pak si podle toho alokuješ paměť a až pak začneš ty hodnoty ze souboru načítat.

Když pracuješ se soubory, měl by sis testovat, jestli se povedlo otevření a uzavření souboru.

Hodnoty z funkce sčítající čísla pak vypisuješ opět nesmyslně, prostě volej tu funkci přímo v printf.
Bari007
VIP uživatel
Uživatelský avatar

Odeslat příspěvekod majklb 6. 3. 2011 18:38

velikost tam je jen proto, že pak v programu něco měním a cpocet se ještě mění nebo se používá jen jedna z těchto hodnot. v mainu u returnu středník už mám, to jsem si nevšiml při kopírování. To upravím ten součet, to testování otevření a zavření naštěstí testovat nemusíme (i když je mi jasný, že v běžném programu by se to psalo). A u té alokace paměti, ta se alokuje i pro main i když ji alokuju v té funkci? A o práci se soubory to není, jde mi opravdu jen a jen o to, jak předat do mainu vstup[1]= x až vstup[n]=xn, a zároveň ten cpocet (ale teď mi došlo, že by to možná šlo řešit přes ten index (neboli to "i") a jen z toho bych odvodil cpocet, jen mi to stále nepředává ten hodnoty toho vstupu :( a bohužel mě už nic nenapadá, jak by to mohlo jít. jestli to je tím co předávám do programu, nebo jak to mám vše definováno.
majklb
Junior

Odeslat příspěvekod Bari007 6. 3. 2011 19:04

Testovat otevření/zavření souboru bys měl také kvůli sobě ;) Protože se ti může stát, že se to nepovede a program pak bude pracovat chybně nebo nebude pracovat vůbec a ty se můžeš divit, v čem je chyba...Na testování je jednoduchá podmínka, určitě bych ji tam dal ;)

Ta paměť je alokovaná tak dlouho, dokud ji neuvolníš. A uvolní se pomocí free nebo skončením programu.

Návrat více hodnot realizuj pomocí ukazatelů. Už jsem ti to popisoval a dával jsem ti i odkaz, kde máš uvedený příklad užití. Použití pro pole je prakticky stejné, jako pro proměnnou - ukazuješ na začátek pole.
Bari007
VIP uživatel
Uživatelský avatar

Odeslat příspěvekod majklb 6. 3. 2011 21:22

aha, tak tu paměť tu mažu na konci pomocí free, a to testování tam teda asi taky hodím, ale zatím jsem si jistej, že otevřít to jde i k hodnotám se dostane ta funkce, jen se mi předá vždycky jen ten cpocet a žádná další hodnota :( pokud vím, tak nikde ten můj případ není popsanej - že předám cpocet + pole (někde jsem četl, že pole se předává automaticky, ale v tom mém programu prostě už má pole adresu, ale hned jak projede return a konečná závorka, tak vstup = 0x0)
majklb
Junior

Předchozí stránka

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků