Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem C - struktury

Ahoj chcel som aby mi program nacital zo suboru par udajov, ale vypisuje mi to chybu neviete vcom je prosim vas problem?:

1. Warning: format '%f' expects argument of type 'float *',but argument 5 has type 'double'
2. Warning: format '%d' expects argument of type 'int *',but argument 6 has type 'int'

druh je premenna typu char, kontinent tiez, hmotnost je float a mladata int.

Tu je riafok kde je chyba:

while(fscanf(fr,"%14s %9s %f %d\n",(zvierata+pocetZvierat)->druh,(zvierata+poce tZvierat)->kontinent,(zvierata+pocetZvierat)->hmot nost,(zvierata+pocetZvierat)->mladata)!=EOF)

Předmět Autor Datum
zvierata+pocetZvierat Tohle je konkrétně co? Do tvého programu nevidím, ale když si definuješ struk…
Niko Bellic 01.05.2014 10:15
Niko Bellic
dakujem moc :)
Parker 01.05.2014 11:31
Parker
fscanf potrebuje adresu. T.j. &(zvierata+pocetZvierat)->hmotnost atd. Ta chybova hlaska ti to pise u…
MM.. 01.05.2014 11:37
MM..
A ten druh a kontinent musia mat uz naalokovane miesto, t.j. bud ako staticke pole v strukture ako c… poslední
MM.. 01.05.2014 11:41
MM..

zvierata+pocetZvierat

Tohle je konkrétně co? Do tvého programu nevidím, ale když si definuješ strukturu a předáš třeba funkci ukazatelem, tak tam nemusíš nic přičítat.

typedef struct neco
{
int polozka1;
char plozka2;
...
}NECO;

Vytvoření proměnné:

NECO n;

Přístup k položce:

n.polozka1;

Nebo přes ukazatel:

n->polozka1;

Nikde žádné sčítání, ale jak říkám, nevím jak máš ten program postavený. Upřesni.
Jinak ta chyba je asi v tom, že předáváš funkci scanf hodnoty, ale ona potřebuje ukazatele na proměnné, kam má uložit obsah. Takže musíš předat pointer:

fscanf(f,"%d",&(n->polozka1));

fscanf potrebuje adresu. T.j. &(zvierata+pocetZvierat)->hmotnost atd.
Ta chybova hlaska ti to pise uplne jasne.

BTW. nie som si isty ci %f neni float a ty mas double, ale u modernych compilerov je tusim %f double. Najprv nechaj %f a ak ti bude blbo nacitavat ten double tak to zmen na %lf.

A ten druh a kontinent musia mat uz naalokovane miesto, t.j. bud ako staticke pole v strukture ako char druh[nejakavelkost]; alebo dynamicky, a u nich uz nepouzivas &, ptz oni sami su uz adresa na ten buffer pre retazec char-ov

BTW. ja osobne sa cely zivot vyhybam fscanf, ptz je to nebezpecne a nekontrolujes syntax. Slusny program si parsuje sam znak po znaku aby vedel reagovat v pripade problemu a aby si nepoprepisoval buffre v pamati.

Zpět do poradny Odpovědět na původní otázku Nahoru