» »

branje iz datoteke c/c++

branje iz datoteke c/c++

postar_si ::

oj.
Imam majčken problem v c-ju in sicer ko berem iz datoteke realna števila mi avtomatsko zaokrožuje števila, jaz pa bi rad prebral cel decimalni del. Izsek iz programa:

float stevilo;
fscanf(datoteka,"%f", &stevilo);

datototeka pa ima naslednjo strukturo: 5.22476084 9.30417235 0.23204512 4.95042522 ....

prebere pa mi 5.224761,....

Lp, Mare

JerKoJ ::

probi z double, ker omogoca vec decimalnih mest

double stevilo;
fscanf(f,"%lf",&stevilo);

lf ... direktiva za long float (oziroma double)

Vesoljc ::

%f ti v osnovi zaokroži izpis na 6 mest.
probaj kaj takega %18.10f, mogoče pomaga.

če ne pa zapiši in beri floate kot byte (fread, fwrite)...
Abnormal behavior of abnormal brain makes me normal...

postar_si ::

Hvala za odgovore.
Na ta dva načina sem že probal, z double dela isto, pri uporabi %10.8f pa se mi program zacikla.
Pri zapisu %x.yf a x in y sta lahko katerikoli števili ali so kakšna pravila?

Z bajti se pa raje nebi lotil, ker sem bolj nevešč prog;)

A je še katera druga rešitev?

Lp, M

McAjvar ::

kaj pa morda %.8f ?
"[...] the advance of civilization is nothing
but an exercise in the limiting of privacy."
- Isaac Asimov

JerKoJ ::

po cem pa ves da ti prebere tocno tok decimalk
samo po izpisu kasnej al ugotovis pri racunanju

probi prebrat (v double) in odstet te decimalke, ki jih vis
pa poglej ce res dobis 0 al kej drucga, na sam izpis s printf
se ne gre prevec zanasat

Vesoljc ::

če znaš printf znaš tud to, druge ni ;)
Abnormal behavior of abnormal brain makes me normal...

alum ::

hm...lahko zakompliciras...pa beres cifto za cifro...potem cifre mnozis z ustrezno potenco 10^x in sestevas...dobis n mestno stevilo, ki ga moras delit le se s stevilom decimalnih mest:)

po tej logiki bi moral nujno dobiti pravo stevilo, v kolikor ni izven dosega:)

postar_si ::

Sem probal %.8f ma ne dela, sem probal s step by step in sem videl da se zacikla v zanki, ko berem iz datoteke.

Da zaokrožil sem opazil tako da sem opazoval vrednost stevilo, med izvajanjem, tako da prebere 6 cifer:(

Zadnji dve zanimivi rešitvi, bom še poizkusil:D .

Hvala za pomoč, lp, Mare

Rok Nemec ::

Tole dela 100%.

void ReadFilex(FILE *file)
{
int read = 0;
double f = 0;
if ((tempFileFloat = (double *) malloc (sizeof (double) * 100000 )) && (tempFileInt = (int *) malloc (sizeof (int) * 100000 )) != NULL)
{
for (read = 0; read < 100000; read++)
{
fscanf(file, "%lf", &f);
tempFileFloat[read] = f;
tempFileInt[read] = f * 100000000;
}
}

Sem pa rezerviral eno tabelo z Floati, drugo pa z Inti zato, ker procesor malce hitreje računa z inti (+ manj memorije zasede). V končni fazi se lahko odločiš da boš najprej vsa števila pretvoril v int-e, potem z njimi računaš, končni rezultat pa nazaj deliš z določeno številko in dobiš float.

p.s. kaj naj izberem v seznamu html oznak, da bo koda pravilno izpisana?

Zgodovina sprememb…

Vesoljc ::

uporabil si double inu ne floate ;)

za kodo pa uporabi tag "st.koda c"
Abnormal behavior of abnormal brain makes me normal...


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Java]Branje podatkov iz datoteke

Oddelek: Programiranje
342662 (1968) jeryslo
»

[c] osnove

Oddelek: Programiranje
352536 (1873) fiction
»

[C++][Naloga] Tekstovne datoteke, realna števila

Oddelek: Programiranje
254051 (3667) Gundolf
»

[C++][Naloga_polja]MIN in MAX polja, izpis za x.100 stevil

Oddelek: Programiranje
222944 (2755) snow
»

c++ datoteke

Oddelek: Programiranje
464056 (3545) Vesoljc

Več podobnih tem