Forum » Programiranje » 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
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)
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)...
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
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
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
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:)
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 .
Hvala za pomoč, lp, Mare
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 .
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?
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…
- spremenil: Rok Nemec ()
Vesoljc ::
uporabil si double inu ne floate
za kodo pa uporabi tag "st.koda c"
za kodo pa uporabi tag "st.koda c"
Abnormal behavior of abnormal brain makes me normal...
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Java]Branje podatkov iz datotekeOddelek: Programiranje | 2662 (1968) | jeryslo |
» | [c] osnoveOddelek: Programiranje | 2536 (1873) | fiction |
» | [C++][Naloga] Tekstovne datoteke, realna številaOddelek: Programiranje | 4051 (3667) | Gundolf |
» | [C++][Naloga_polja]MIN in MAX polja, izpis za x.100 stevilOddelek: Programiranje | 2944 (2755) | snow |
» | c++ datotekeOddelek: Programiranje | 4056 (3545) | Vesoljc |