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

Struct – C / C++ – Fórum – Programujte.comStruct – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Jockie0
Newbie
19. 4. 2006   #1
-
0
-

Zdravim...

chtel bych se zeptat jak by se vypsala na obrazovku cela struktura ulozena v bin souboru.



soubor = fopen("data.bin","rb");
if (soubor) {
fread(osoba,sizeof(osoba),1,soubor);
for (i=0; i<10; i++) {
printf("%s %s %dn",osoba[i].jmeno,osoba[i].prijmeni,osoba[i].vek);
}
}
fclose(soubor);
break;

takhle mi to vypise vsech 10 polozek (i kdyz nejsou vyplnene). Poradi mi nekdo jak to udelat aby to vypsalo pouze zadane lidi. Nebo jestli to jde udelat nejak bez cyklu primo vypis structury ...

Nahlásit jako SPAM
IP: ...–
Lovi´n it .... c(_)
Reklama
Reklama
Tom?? Bos0
Stálý člen
19. 4. 2006   #2
-
0
-

Cyklusom for si zapricinis to aby ti vzdy vypisalo vsetkych 10 poloziek aj ked niesu vsetky zapisane. Skus dat fread do toho cyklu, napr.



for (i=0; fread(osoba,sizeof(osoba),1,soubor) == 1; i++)
{
printf("%s %s %d\n",osoba.jmeno,osoba.prijmeni,osoba.vek);
}

Nahlásit jako SPAM
IP: ...–
- Tuk tuk tuk!
Kto tam?
- Rekurzia.
Ktoze???
- Tuk tuk tuk!
Jockie0
Newbie
19. 4. 2006   #3
-
0
-

Zkusil jsem to ale když to použiji tak mi to vypíše pouze data ze struktury (jmeno, prijmeni, vek) jedna osoby ...

Nahlásit jako SPAM
IP: ...–
Lovi´n it .... c(_)
Tom?? Bos0
Stálý člen
19. 4. 2006   #4
-
0
-

Neviem ako vytvaras strukturu takze tazko povedat preco to nefunguje. Neviem ci ti to pomoze, ale tu mas program, ktory riesi podobny problem a tam to funguje:



#include <stdio.h>

struct Osoba
{
char jmeno[20];
char prijmeni[20];
int vek;
};

int main()
{
int pocetOsob;
FILE *souborRead;
FILE *souborWrite;

printf("Zadaj pocet osob: ");
scanf("%d", &pocetOsob);

Osoba osoba[pocetOsob];

for(int j = 0; j < pocetOsob; j++)
{
printf("Zadaj meno: ");
scanf("%s", &osoba[j].jmeno);

printf("Zadaj prijmeni: ");
scanf("%s", &osoba[j].prijmeni);

printf("Zadaj vek: ");
scanf("%d", &osoba[j].vek);
}

//========================================================

souborWrite = fopen("data.bin","wb");

for(int j = 0; j < pocetOsob; j++)
{
fwrite(&osoba, sizeof(Osoba), 1, souborWrite);
}

fclose(souborWrite);

//========================================================

souborRead = fopen("data.bin","rb");


for (int j = 0; fread(&osoba, sizeof(Osoba), 1, souborRead) == 1; j++)
{
printf("Jmeno: %s\n", osoba[j].jmeno);
printf("prijmeni: %s\n", osoba[j].prijmeni);
printf("Vek: %d\n", osoba[j].vek);
}

fclose(souborRead);

//========================================================

getchar();
getchar();
return 0;
}

Nahlásit jako SPAM
IP: ...–
- Tuk tuk tuk!
Kto tam?
- Rekurzia.
Ktoze???
- Tuk tuk tuk!
Jockie0
Newbie
20. 4. 2006   #5
-
0
-

dekuji !! Jeste bych mel jeden dotaz...

 

osoba[pocetOsob];
for(int j = 0; j < pocetOsob; j++)


ale builder mi to nechce sezrat :( poradi nekdo proc ??

Nahlásit jako SPAM
IP: ...–
Lovi´n it .... c(_)
some_one0
Návštěvník
21. 4. 2006   #6
-
0
-

Protože to pocetOsob není konstanta :-), snažíte se o statickou definici pole pomocí dynamické proměnné, takhle to nejde.

Je nutné použít operátor new, ne jen Osoba[pocetOsob]
staticky se totiž to pole vytváří už při spuštění (hned na začátku, resp. kompilátor si to nachystá tak aby se tam vytvořilo o dané velikosti, jenže problém je že z dynamické(resp. nekonstantní) proměnné to nepozná.



Osoba * osoba = new Osoba[pocetOsob];

Nahlásit jako SPAM
IP: ...–
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, 60 hostů

Podobná vlákna

Struct vo funkcii — založil Eversmann

Fronta(Struct) — založil Barda

Dyn Struct — založil myth

Struct vs. class — založil Jakub Sosnovec

Struct a práce s ním — založil Jan

Moderátoři diskuze

 

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