Sočet řádků text. souboru v C – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Sočet řádků text. souboru v C – C / C++ – Fórum – Programujte.comSočet řádků text. souboru v C – C / C++ – Fórum – Programujte.com

 

TheSun0
Duch
6. 4. 2010   #1
-
0
-

Napište v jazyku C funkci int soucty(const char *vstup, const char *vystup), která čte ze vstupního souboru vstup desetinná čísla, počítá součty na jednotlivých řádcích a zapisuje je do výstupního souboru vystup. Na konec výstupního souboru pak navíc vloží sumu všech čísel ve vstupním souboru.


Zdrojový soubor:
    7.134     0.5198    2.436     0.9626 

1.27 1.324 0.9639 1.538 0.4995
1.503 4.95 0.3466
0.454 2.367 0.6877 9.057 0.1807 1.112
4.287 8.675 1.511 0.4296 0.2331

Výsledek:
11.0524

5.5954
6.7996
13.8584
15.1357

Suma: 52.4415


Nemám tu ani tak problém s načítáním ze souboru, spíš bych potřeboval poradit a nakopnout správným směrem. Když si do pole pomocí fgets načtu řádek, potřebuju v něm zpracovat všechna čísla a sečíst je. Když jsem to zkoušel procházet jeden znak po druhém a pokaždé když jsem narazil na číslo jej přičíst k předchozímu tak mi to nevycházelo, nezatahoval jsem do toho dokonce ani řády a pokoušel se sečíst jenom všechny číslice v řádku. Tuším, že to má co dělat s tím, že jednotlivé číslice v poli jsou typu char a proto mi jejich součet nevychází, ale i když jsem je zkoušel přetypovat tak se to nechytalo, nebo jsem spíš udělal něco blbě. Mohl by někdo pomoci?

Nahlásit jako SPAM
IP: 93.99.61.–
m->29+6
Super člen
6. 4. 2010   #2
-
0
-

Neviem ako si to skúšal, ale pozri si funkciu strtod(), ktorá ti ten reťazec prevedie na číslo.

Nahlásit jako SPAM
IP: 147.229.208.–
liborb
~ Redaktor
+18
Guru
7. 4. 2010   #3
-
0
-

To TheSun : Nakonec skončíš u strtod, jak ti radí m->29, ale k tomu tvému problému. Načtené pole opravdu obsahuje znaky, tj. například řetězec "7.134". Když chceš provést součet po číslicích (a ne jejich ordinálních hodnotách), tak musíš "převést" znak na jeho hodnotu. To se nejčastěji dělá tak, že se odečteš znak '0' (nula):



char c = '7';

int n = c - '0';

Nahlásit jako SPAM
IP: 85.207.166.–
LJ10240
Stálý člen
7. 4. 2010   #4
-
0
-

pokud by se ti nelibila fce strtod(), tak muzes zkusit tohle:



char radek[]="7.2154 54.54543543 64.2123145";
float soucet=0;
char *hledam;
hledam=strtok(mem, " ");
while(hledam!=NULL){
soucet+=atoi(hledam);
hledam=strtok(NULL, " ");
}
////v promenne "soucet" je soucet cisel z pole "radek"

Nahlásit jako SPAM
IP: 217.30.64.–
liborb
~ Redaktor
+18
Guru
7. 4. 2010   #5
-
0
-

To LJ1024 : atof

Nahlásit jako SPAM
IP: 85.207.166.–
LJ10240
Stálý člen
7. 4. 2010   #6
-
0
-

liborb napsal:
To LJ1024 : atof



Diky za upozorneni, ten kod jsem nezkousel... :)

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

2 LJ1024: Co je za hodnotou "mem" na riadku 5 ?

Nahlásit jako SPAM
IP: 85.135.158.–
LJ10240
Stálý člen
7. 4. 2010   #8
-
0
-

Podruhe se omlouvam, misto mem ma byt radek

takze takto:

char radek[]="7.2154         54.54543543     64.2123145";

float soucet=0;
char *hledam;
hledam=strtok(radek, " ");
while(hledam!=NULL){
soucet+=atof(hledam);
hledam=strtok(NULL, " ");
}

////v promenne "soucet" je soucet cisel z pole "radek"

Nahlásit jako SPAM
IP: 217.30.64.–
TheSun0
Duch
7. 4. 2010   #9
-
0
-

Děkuji, všem za odpovědi, nakonec jsem toen převod řešil tím odečítáním nuly. V cyklu se mi teď pěkně vypisují všechny součty jednotlivých řádků. V každém cyklu bych ještě potřeboval to číslo zapsat do souboru, každé na zvlášť řádek, narážím tady ale znovu na problémek s fputs, které bere jenom char a číslo mám v proměnné typu float. Zkoušel jsem něco jako

fputs((char)cislo, vystup);

ale s tím sem se daleko nedostal, máte nějakej osvědčenej způsob jak to provést?


EDIT: Vše jsem vyřešill fprintf, ještě jednou díky za pomoc!

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

Podobná vlákna

Editovani text. souboru — založil Jakub

čtení řádků ze souboru — založil Random321654

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ý