Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 10 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 08.09.11
Prihlásený: 17.09.11
Príspevky: 11
Témy: 4
Príspevok NapísalOffline : 16.09.2011 15:04

Dokaze mi niekto vysvetlit toto:
V pocitaci mam vistu
Stiahol som si CodeBlocks a v tom robim.
Z knihy Kerighan-Ritchie som opisal priklad pre prikaz na spocitanie zadanych znakov (strana 32 - mal by spocitat pocet znakov):
Kód:
#include <stdio.h>
main()
{
    long pz;
    pz = 0;
    while(getchar() != EOF)
    ++pz;
    printf("pocet znakov je %ld\n" , pz);
    }


V tomto mi nevypise nic - nefunguje printf.

Ak to napisem takto:
Kód:
#include <stdio.h>
main()
{
    long pz;
    pz = -1;
    while(getchar() != EOF)

    {
       ++pz;
    printf("Pocet zadanych znakov je %ld\n", pz);
    }

    }


Tak to sice funguje, ale printf mi logicky vypise tolkokrat kolko je zadanych znakov +1, ale aspon viem identifikovat ze pocet znakov je hodnota uvedena na poslednom riadku toho co vypise

Ako to urobit tak, ze spocita pocet znakov ale printf vykona len 1x? (t.j. rozbehat ten horny program)


Offline

Skúsený užívateľ
Skúsený užívateľ
c - pocet znakov

Registrovaný: 11.01.09
Prihlásený: 22.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 16.09.2011 15:38

1.) Ako si prisiel na to, ze prvy priklad ti nefunguje? Vies aspon povedat, co ma robit? Lebo z tvojej odpoveda to vyzera tak, ze nie. Dam ti jednu radu, kedze si zaciatocnik - neuc sa stylom 'opisem a naucim sa naspamat'. Takto sa daleko nedostanes. Ak prejdes nejaku kapitolu, zavri knihu a skusaj pouzit vsetky funkcie, ktore si sa naucil, hraj sa, kombinuj, zistuj, preco je vystup taky ako je, prechadzaj hoc riadok po riadku, aby si to zistil. O tom je programovanie. Teraz k tvojej otazke: priklad je spravny, pozri sa na slucku, ktoru v nom pouzivas:
Kód:
while( getchar() != EOF )
    ++pz;

Vies co to znamena? Pomozem ti. getchar() precita znak zo vstupneho bufra (chap z klavesnice) a porovna ho so znakom EOF. Ak sa nerovna, zvysi nase pocitadlo pz. Ak sa rovna, ukonci sa slucka a vypise sa premenna pz. Cize az ked zadas znak EOF, az vtedy dojde k vypisu. A tu je ten problem, pretoze zrejme nevies, ze tento znak je kombinacia klaves CTRL+Z a enter (mali by byt na novom riadku tusim). Pripadne na linuxe to moze byt CTRL+D.

2.) Zrejme si bud umyselne alebo nechtiac odignoroval moju predchadzajucu radu, aby si na vkladanie kodu na forum pouzil tag [code ][/code]. Jednoducho vyznac cely text a hore hned nad textovym panelom je tlacidlo code, ktore staci len stlacit. Skus sam posudit, ci vyzera lepsie kod z tvojho prveho prispevku, alebo tento:
Kód:
#include <stdio.h>

int main()
{

    long pz = 0;

    while( getchar() != EOF )
        ++pz;

    printf("pocet znakov je %ld\n", pz);

    return 0;

}


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 08.09.11
Prihlásený: 17.09.11
Príspevky: 11
Témy: 4
Príspevok Napísal autor témyOffline : 16.09.2011 21:13

Napisal som rozsiahlejsiu odpoved, ale nie som si isty ci odisla (pouzil som code).
Ale este raz to pre istotu strucne zopakujem:
Dakujem za odpoved.
Nic sa neucim naspamat, a rozne prikazy a zmeny v programe si skusam, dokazom je aj ten druhy program ktory sice funguje ale nie tak ako by mal.
Ked som stravil kopu hodin so skusanim tak som sa rozhodol pre forum. Asi uz posledny raz.
V knihe nepise ziadny ctrl+xy, okrem toho aj ked to pouzijem tak ten program nebezi.
Ten druhy bezi aj bez ctrl+??+enter
p.s.
som dochodca a chcem si iba zlepsit pocitacovu zrucnost. Doteraz som pc pouzial len na pisanie, web a maily. A s pc forom definitivne koncim, pretoze co robi slucka mi nikto nemusi vysvetlovat.


// pridané po 2 minútach od posledného príspevku

A este na doplnenie - niekde su v knihe aj tlacove chyby.
A mne sa dost tazko posudzuje ci je tam tlacova chyba alebo je v mojom programe chyba...


Offline

Skúsený užívateľ
Skúsený užívateľ
c - pocet znakov

Registrovaný: 11.01.09
Prihlásený: 22.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 16.09.2011 22:06

mk* píše:
Ked som stravil kopu hodin so skusanim tak som sa rozhodol pre forum. Asi uz posledny raz.

Mozem sa spytat, preco? Bola to snad nepresna odpoved? Forum tu je na to, aby sa ludia pytali, ale mali by sa dodrzovat urcite pravidla, preto som pisal, aby ste pouzili znacku [code ].
Velmi som nepochopil otazke "Ten druhy bezi aj bez ctrl+??+enter". Co presne mate na mysli? Druhy priklad?


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 08.09.11
Prihlásený: 17.09.11
Príspevky: 11
Témy: 4
Príspevok Napísal autor témyOffline : 17.09.2011 8:43

Myslím si že odpoveď bola nepresná.
Áno, tento program síce funguje aj bez ctrl, len s entrom, akurát vypíše výsledok podľa toho čo je zapísané v cykle - t.j. viackrát v závislosti na počte zadaných znakov, čo som chcel eliminovať, ale v podstate výsledok je správny:
Kód:
#include <stdio.h>
main()
{
    long pz;
    pz = -1;
    while(getchar() != EOF)
    {
       ++pz;
    printf("Pocet zadanych znakov je %ld\n", pz);
    }
    }

a tento program by mal robiť to isté ale len s jedným výpisom výsledku a print jednoducho nejde
Kód:
#include <stdio.h>
main()
{
    long pz;
    pz = 0;
    while(getchar() != EOF)
    ++pz;
    printf("pocet znakov je %ld\n" , pz);
    }

Ale to je v podstate to isté čo som písal v prvom príspevku.


Offline

Užívateľ
Užívateľ
c - pocet znakov

Registrovaný: 09.04.11
Prihlásený: 11.01.14
Príspevky: 257
Témy: 26
Bydlisko: Kesa
Príspevok NapísalOffline : 17.09.2011 8:57

Odpoveď je jednoduchá.
Kedže to printf máš v cykle "slučke", tak ti to bude stále vypisovať. Vždy ti bude vypisovať aktuálnu hodnotu a pripočítavať k nej ďalšiu hodnotu, pokiaľ nezadáš EOF. Lenže keď dáš to printf až za slučku, tak v slučke ti ich všetky spočíta a po ukončení slučky prejde na ďalší príkaz, ktorým je printf a vypíše aktuálnu hodnotu.
Mimochodom je to presne to, čo napísal Fico v tom kóde.







_________________
NB - HP Pavilion DV7 3190 -- Windows® 7 Home Premium 64-bit -- Intel® Core™ i7-720QM 1,6 GHz az 2,8 Ghz Turbo Boost, 6 MB pamäte cache úrovne 2 -- 4 GB DDR3 -- disk 640 GB SATA 5400 ot/min -- rozlíšenie 1600 x 900 -- NVIDIA® GeForce® GT 230M -- 2 815 MB grafickej pamäte s vyhradenou pamäťou 1 GB DDR3 -- pripojenie 802.11 a/b/g/n
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 08.09.11
Prihlásený: 17.09.11
Príspevky: 11
Témy: 4
Príspevok Napísal autor témyOffline : 17.09.2011 9:11

Kód:
Tomu rozumiem.
Len nerozumiem tomu že prečo mi to iste nerobí tento program:
#include <stdio.h>

main()

{
    long pz;

    pz = 0;
    while(getchar() != EOF)
    ++pz;
    printf("pocet znakov je %ld\n" , pz);
    }


Offline

Užívateľ
Užívateľ
c - pocet znakov

Registrovaný: 09.04.11
Prihlásený: 11.01.14
Príspevky: 257
Témy: 26
Bydlisko: Kesa
Príspevok NapísalOffline : 17.09.2011 9:20

To EOF znamená "rob, pokiaľ nebude program ukončený". Ja už neviem presne, ktoré sú tie skratky pre ukončenie. Ja používam EOF ako podmienku konca pri čítaní z nejakú súboru. Lenže v tvojom programe nevidím nijaké hodnoty, ktoré tam máš už vložené, alebo ktoré vkladáš počas programu. A kludne si zmeň to EOF za niečo iné, napríklad za @. To znamená, že budeš vkladať hodnoty, pokiaľ nezadáš @, načítavanie sa ukončí a napíše ti aktuálnu hodnotu. Napísal by som ti aj vzorový príklad, lenže v C neviem robiť. Neviem tie príkazy. Jedine že ti to nebude vadiť v C++.







_________________
NB - HP Pavilion DV7 3190 -- Windows® 7 Home Premium 64-bit -- Intel® Core™ i7-720QM 1,6 GHz az 2,8 Ghz Turbo Boost, 6 MB pamäte cache úrovne 2 -- 4 GB DDR3 -- disk 640 GB SATA 5400 ot/min -- rozlíšenie 1600 x 900 -- NVIDIA® GeForce® GT 230M -- 2 815 MB grafickej pamäte s vyhradenou pamäťou 1 GB DDR3 -- pripojenie 802.11 a/b/g/n
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 08.09.11
Prihlásený: 17.09.11
Príspevky: 11
Témy: 4
Príspevok Napísal autor témyOffline : 17.09.2011 9:33

Dakujem za odpoved.
Uz som na to prisiel. Aj vdaka tvojmu návodu.
Uvedomil som si totiz ze mne EOF vracia hodnotu 10. Zmenil som podmienku na 10 a už to ide.
Mňa totiž miatla jedna vec - preberám príklady z knihy, a tam bolo písané priamo zadať priamo "EOF" - t.j. ja som predpokladal, že program prečíta to EOF ako 10. Ale vidím že nie. Musím zadať natvrdo hodnotu 10 do podmienky.


Offline

Užívateľ
Užívateľ
c - pocet znakov

Registrovaný: 27.12.08
Prihlásený: 13.12.22
Príspevky: 1874
Témy: 96
Bydlisko: Bratislava,...
Príspevok NapísalOffline : 17.09.2011 11:21

10 je znak, ktorý označuje koniec riadka.. EOF je znak, ktorý označuje koniec súboru..







_________________
~Listen to your brain, not your heart~
NB1: Lenovo Y500: CPU: Intel Core i7-3630QM; GPU: nVidia GT650M 2GB SLi; RAM: 16GB DDR3; HDD: 1TB + 256GB SSD (m4); LCD: 15,6" 1920x1080; OS: Win8.1 64-bit + Arch Linux 64-bit (UEFI Powered DualBoot)
NB2: Asus K53SJ-SX093: CPU: Intel Core i3-2310M; GPU: Intel HD3000 / nVidia GT520M 1GB Optimus; RAM: 8GB DDR3; SSD: 128GB 840Evo; LCD: 15,6" 1366x768; OS: Win 8.1 Pro 64-bit (UEFI)
Odpovedať na tému [ Príspevkov: 10 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. Minimálny počet znakov

v PHP, ASP

3

550

27.07.2007 7:56

zero0x Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Naformatovat bunka na urcity pocet znakov v excely

v Ostatné programy

0

354

26.04.2011 10:13

kati123 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Asm i8080: vypisat pocet slov s dlzkou 2 az 5 znakov

v Assembler, C, C++, Pascal, Java

26

3982

15.03.2011 13:47

katiMIR Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Kodovanie znakov

v Operačné systémy Microsoft

0

368

16.05.2010 18:20

sasori1512 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Mapa znakov

v Operačné systémy Microsoft

2

2437

18.11.2009 19:36

Lukas9 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Redukovanie množstva znakov

v PHP, ASP

5

282

30.04.2013 15:36

BX Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Množstvo rovnakých znakov

v PHP, ASP

1

499

14.05.2011 10:53

Ďuri Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. MySQL kódovanie znakov

v Databázy

8

462

29.07.2013 12:29

DeiForm Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Nespravne zobrazovanie znakov

v Redakčné systémy

1

668

12.10.2006 22:11

itsgoingd Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Sirka divu - vela znakov

v Ostatné

3

502

06.04.2009 17:11

exoomer Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vypísanie znakov v C

v Assembler, C, C++, Pascal, Java

4

468

18.04.2012 20:48

Fico Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. nastavenie znakov na klávesnici

v Externé zariadenia

2

347

31.07.2014 11:12

DonnieBrasco Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C++ Čitanie znakov/čísel

v Assembler, C, C++, Pascal, Java

6

565

09.05.2014 12:04

Lukys12345 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Textarea limit znakov onkeypress

v JavaScript, VBScript, Ajax

4

1122

14.05.2019 22:13

neopagan Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. skratit retazec na 10 znakov

v PHP, ASP

2

579

11.03.2010 18:27

1daemon1 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Aky hash - 11 znakov a =

v Ostatné

0

300

07.04.2012 23:17

exoomer Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra