Využij akce až 80 % zdarma při nákupu e-learningu. Více informací.
Pouze tento týden sleva až 80 % na e-learning týkající se Pythonu
discount week 80
Avatar
Jiří Weiss
Člen
Avatar
Jiří Weiss:24.4.2020 16:29

Dostal jsem zadání do školy, kdy mám dokument ve kterém jsou zapsány osoby ve tvaru jméno;příjmení;věk. Od vyučujícího jsme dostali předepsaný kód, kde máme doplnit funkci void, která zjistí osobu (po řádku) a načte je do struktury, která obsahuje char jmeno[20], char prijmeni[20], int vek, takže středník odděluje slova . Načítat máme pomocí fgets a pomocí atoi převést char věk na int. Tuto funkci voláme do cyklu, který otevírá soubor a čte po řádku pomocí prostřednictvím předchozí funkce. Potom další dvě funkce, které seřadí osoby podle abecedy a další, která je vypíše v mainu. problém je takový, že jsem se sekl hned u první funkce, kdy nevím jak načíst prvky mezi středníkama a načíst je do struktury. Učitel je celkem nekompromisní a strhává body za nebezpečný kód nebo změnu jeho předepsaného kódu a u ostatních spolužáků strhával body i za to, když použili místo fgets funkci getline, která by mi nědělala takový problém. výstup mého kódu je vždycky zacyklení s nesmyslnými znaky.

Zkusil jsem: Pokusil jsem se použít fgets pro přečtení řádku. A potom různé cykly abych zjistil, kde je v textu středník a načítat text mezi středníky do struktury nebo do pomocných proměnných, které potom pomocí fscanf_s načtu do struktury, nic nefungovalo.

Chci docílit: Program má mít na výstupu osoby, které jsou seřazené příjmením podle abecedy. Programátor jsem vcelku průměrný, ale tohle zadání v kombinaci s tím, že práci se soubory skoro vůbec neovládám mi udělaly z posledního týdnu celkem peklo. Na netu jsem hledal různé příklady použití funkcí pro práci se soubory, ale žádný mi nebyl nápomocný. Chci se to naučit, ale prostě nemám žádné podklady a ani možnost se to odněkud naučit.

 
Odpovědět
24.4.2020 16:29
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Jiří Weiss
DarkCoder:24.4.2020 17:50

Pěkná a zejména praktická úloha. S tímto se setkáš v každém středně větším a větším projektu. Je vidět, že profesor si Vás směřuje dobře a učí Vás to tak, jak se to má dělat. Na druhou stranu Vám to dosti zjednodušil, možná lépe řečeno podal na zlatém podnose. Zpracoval za Vás podobu objektu, deklarace funkcí a jasnou návaznost jednotlivých částí na sebe. Takto to nikde ve skutečnosti snadné mít nebudete. Trochu zmixoval C a C++ styl ale jinak v pořádku.

Nejprve trochu opravím vyjádření k zadání:

kde máme doplnit funkci void

Takto to zní jako by se měla funkce jmenovat void, což samozřejmě nemůže. void je klíčové slovo, které nelze být použito k názvu identifikátoru. Správné vyjádření je:

kde máme doplnit funkce, které nevrací žádnou hodnotu.

načíst je do struktury

Data se nenačítají do struktury, ale do pole struktur typu TOsoba.

Že je profesor nekompromisní je naprosto v pořádku, půlku toho za Vás udělal a chce po Vás pouze tu třešničku na dortu. Na oplátku vyžaduje preciznost což je jen a jen dobře.

Zdrojů na práci se soubory je plný net. Někde dobře, někde špatně nebo nepřesně. Ale je. Na druhou stranu pokud po Vás profesor něco chce, pak Vám to musel vysvětlit. Také mohl jít cestou takovou, že po Vás chce, abyste se naučili spoustu věcí dohledávat, což pokud se budeš chtít programování dále věnovat, bude nedílná součást tvé práce.

Popisuješ, co si prováděl, ale neposlal si jedinou řádku toho co si zpracoval (pouze zadání). Tím že pošleš, bude moci kdokoli reagovat na to co děláš špatně a budou Tě moci lépe navést. Takto jak to popisuješ je to pouze obecné. Chápu že se těžko začíná když se neví jak otevřít soubor, kde se od této operace vše následující odvíjí. Dále musíš vědět jak funkce fgets() pracuje. Že vyžaduje znakové pole, omezení, ukazatel na soubor, že může dojít k vložení znaku nového řádku (ale nemusí), že je třeba provést analýzu a toto odstranit, čímž získáš požadovaný řetězec se kterým budeš dále pracovat.

I špatným kódem, o kterém víš že je špatný, se novému přiučíš...

Nahoru Odpovědět
24.4.2020 17:50
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.