Pole ukazatelů na strukturu – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Pole ukazatelů na strukturu – C / C++ – Fórum – Programujte.comPole ukazatelů na strukturu – C / C++ – Fórum – Programujte.com

 

RePRO0
Super člen
13. 4. 2010   #1
-
0
-

Už fakt nevím, jak tento problém vyřešit. Snad mi někdo ochotný pomůže a celou problematiku vyřešíme. Nemyslím si, že je to (extrémně) složité. Fakt jen opravdu zájemci, kteří budou psát - zdrojový kód. Nechci nějaké (chytré) řečičky o tom...

Mám tedy soubor knizky.txt:

Bozena Nemcova;Bara;1961;

Karel Capek;Bila Nemoc;1966;
Shakespeare;Romeo a Julie;1658;


Mám strukturu:
typedef struct Kniha

{
char jmeno[20];
char autor[20];
int rokVydani;
} tKniha;


A mám nějaké pole ukazatelů, ukazující právě na tuto strukturu:
Kniha * knihy[20];


Potřeboval bych metodu (funkci), která mi vrátí (nebo vypíše) následující:
knihy[0]->autor = "Bozena Nemcova";

knihy[0]->jmeno = "Bara";
knihy[0]->rokVydani = 1961;
knihy[1]->autor = "Karel Capek";
knihy[1]->jmeno = "Bila Nemoc";
knihy[1]->rokVydani = 1966;
knihy[2]->autor = "Shakespeare";
knihy[2]->jmeno = "Romeo a Julie";
knihy[2]->rokVydani = 1658;



Prostě (vůbec) netuším, jak to dostat do toho pole. Jak vytvořit tu funkci. Mockrát děkuju za cenné rady.

Nahlásit jako SPAM
IP: 83.240.104.–
Software: C; C++; C#; Pascal; Delphi; Java Webdesign: PHP; MySQL; CSS; jQuery; Ajax; Javascript; OOP
yaqwsx+9
Posthunter
13. 4. 2010   #2
-
0
-

Nepochopil jsem jestli si nevíš rady s načítací funkcí nebo vypisovací. Na načítací bych šel bych na to velice jednoduše:



void read(ifstream& s, Kniha* k)
{
for(size_t i = 0; i != 20; i++)
{
Kniha temp;
s.getline(temp.jmeno, 20, ';');
s.getline(temp.autor, 20, ';');
s >> temp.RokVydani;
k[i] = temp;
}
}

Je to jenom krátký kód, nějak nekontroluju vstup, ani zda v poli nešahám mimo jeho rozsah. To si musíš dodělat.

Nahlásit jako SPAM
IP: 85.160.72.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
RePRO0
Super člen
13. 4. 2010   #3
-
0
-

To vůbec nemusíš dělat dokud i != 20. Stačí vědět, že se jedná o ukazatele a hodit tam null ne? :-) Ale jinak díky, ale má to být napsané v C. Ty to máš v C++

Nahlásit jako SPAM
IP: 83.240.104.–
Software: C; C++; C#; Pascal; Delphi; Java Webdesign: PHP; MySQL; CSS; jQuery; Ajax; Javascript; OOP
liborb
~ Redaktor
+18
Guru
14. 4. 2010   #4
-
0
-

Tu máš nástřel ... otevření souboru, ošetření chyb, atd. si už dodělej sám.



FILE *soubor;
char radek[256];
char oddelovac[] = ";";
char *cast = NULL;
int index = 0;

while (fgets(radek, 256, soubor) != NULL) {
cast = strtok(radek, oddelovac);
strcpy(knihy[index]->autor, cast);

cast = strtok( NULL, oddelovac);
strcpy(knihy[index]->jmeno, cast);

cast = strtok( NULL, oddelovac);
knihy[index]->rokVydani = strtoul(cast, NULL, 10);

index++;
}

Nahlásit jako SPAM
IP: 85.207.166.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 102 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý