čtení čísel ze souboru – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

čtení čísel ze souboru – C / C++ – Fórum – Programujte.comčtení čísel ze souboru – C / C++ – Fórum – Programujte.com

 

kisa
~ Anonymní uživatel
5 příspěvků
21. 4. 2007   #1
-
0
-

Tak nějak jsem zvládl načíst řetězec ze souboru do proměnné. Ale potřeboval bych načíst jednotlivá čísla (float) uložená v souboru a oddělená mezerou do pole. Musím to nejřív celé načíst do nějaké proměnné jako řetěžec a pak z toho řetězce získat jednotlivá čísla, nebo jde nějak udělat, že rovnou při čtení ze souboru budu ta čísla ukládat do pole? Mělo by to být v jen v c, ne v c++. Může mi někdo napsat nějaký příklad. Dík

Nahlásit jako SPAM
IP: ...–
21. 4. 2007   #2
-
0
-



#include <stdio.h>
int main(){

char filename[] = "data.txt";
FILE *fr;
float num[3];

fr = fopen(filename, "rt");
fscanf("%f %f %f", num[0], num[1], num[2]);
fclose(fr);

return 0;
}

Nahlásit jako SPAM
IP: ...–
kisa
~ Anonymní uživatel
5 příspěvků
21. 4. 2007   #3
-
0
-

To Zelenáč: Díky za radu, jen bych si dovolil opravit pár chyb, kdyby to náhodou někdo potřeboval:

fscanf(fr, "%f %f %f", &num[0], &num[1], &num[2]);

Nahlásit jako SPAM
IP: ...–
21. 4. 2007   #4
-
0
-

kisa píše:#
# To Zelenáč: Díky za radu, jen bych si dovolil opravit pár chyb, kdyby to náhodou někdo potřeboval:#
#

fscanf(fr, "%f %f %f", &num[0], &num[1], &num[2]);


JJ, sry, nejak sem nat tim nepremejslel =)

Nahlásit jako SPAM
IP: ...–
kisa
~ Anonymní uživatel
5 příspěvků
21. 4. 2007   #5
-
0
-

Ještě bych potřeboval spočítat počet mezer v souboru. Napadlo mě toto:

while(!feof(fr))

{
if(fgetc(fr)==' ')i++;
}
fseek(fr, 0, SEEK_SET);

Funguje to, ale říkám jestli by to nešlo nějak jednodušeji. Není na to třeba nějaká fce?

Nahlásit jako SPAM
IP: ...–
21. 4. 2007   #6
-
0
-

Jednoduseji? Mne to tedy prijde jednoduche dost... A troufam si rict, ze na to zadna funkce neni ;-)

Nahlásit jako SPAM
IP: ...–
kisa
~ Anonymní uživatel
5 příspěvků
21. 4. 2007   #7
-
0
-

Ještě bych měl jeden dotaz. K načítání čísel jsme použil toto:



while(!feof(fr))
{
fscanf(fr, "%f", &v[i++]);
}

přetím jsem si alokoval paměť pro v. Takže je to pro libovolný počet čísel uložených v souboru. Problém je když tam místo některého čísla budou znaky, tak se mi to zacyklí. chtěl bych to ošetřit tak, aby když se tam ty znaky objeví, tak fscanf uloží 0 do v.

tzn. v souboru bude uloženo např:
25 25.2 245.12 fg 21 54.2

a do proměnné v se uloží:
25 25.2 245.12 0 21 54.2

Nahlásit jako SPAM
IP: ...–
21. 4. 2007   #8
-
0
-

Ja bych jeste pred nacitanim tech cisel projel cyklem vsechny retezce a nahradil je za 0...

Nahlásit jako SPAM
IP: ...–
Peter D.0
Expert
21. 4. 2007   #9
-
0
-

počet medzier = počet čisel -1
ak je to v tom istom subore a medzery su iba tam kde maju byť

Nahlásit jako SPAM
IP: ...–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
21. 4. 2007   #10
-
0
-

mephi píše:#
# počet medzier = počet čisel -1#
#ak je to v tom istom subore a medzery su iba tam kde maju byť


Tusim, ze je to naopak.. pocet cisel = pocet mezer+1...

Nahlásit jako SPAM
IP: ...–
kisa
~ Anonymní uživatel
5 příspěvků
21. 4. 2007   #11
-
0
-

A co vlatně vrátí fscanf, když ho budu nutit číst tím %f znak?

Nahlásit jako SPAM
IP: ...–
21. 4. 2007   #12
-
0
-

Vraci pocet uspesne nahranych polozek... Kdyz se budes pokouset nahrat znak, do pormene se ulozi ASCII kod toho znaku.. Tezko rict, co se stane, kdyz se pokusis nahrat retezec..

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

Podobná vlákna

Sscanf - cteni dvou uint cisel — založil Earl Cash

Čtení souboru ve VB — založil hansk

čtení ze souboru — založil Jakub Vojáček

Cteni souboru — založil marek321

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ý