[ 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 | 4
NapísalOffline : 16.09.2011 15:04 | c - pocet znakov

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ý: 04.05.24
Príspevky: 1385
Témy: 9 | 9
Bydlisko: Hrinova
NapísalOffline : 16.09.2011 15:38 | c - pocet znakov

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 | 4
Napísal autor témyOffline : 16.09.2011 21:13 | c - pocet znakov

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ý: 04.05.24
Príspevky: 1385
Témy: 9 | 9
Bydlisko: Hrinova
NapísalOffline : 16.09.2011 22:06 | c - pocet znakov

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 | 4
Napísal autor témyOffline : 17.09.2011 8:43 | c - pocet znakov

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 | 26
Bydlisko: Kesa
NapísalOffline : 17.09.2011 8:57 | c - pocet znakov

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 | 4
Napísal autor témyOffline : 17.09.2011 9:11 | c - pocet znakov

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 | 26
Bydlisko: Kesa
NapísalOffline : 17.09.2011 9:20 | c - pocet znakov

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 | 4
Napísal autor témyOffline : 17.09.2011 9:33 | c - pocet znakov

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 | 96
Bydlisko: Bratislava,...
NapísalOffline : 17.09.2011 11:21 | c - pocet znakov

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)
 [ Príspevkov: 10 ] 


c - pocet znakov



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

551

27.07.2007 7:56

zero0x

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

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

3987

15.03.2011 13:47

katiMIR

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

Kodovanie znakov

v Operačné systémy Microsoft

0

369

16.05.2010 18:20

sasori1512

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

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

Redukovanie množstva znakov

v PHP, ASP

5

283

30.04.2013 15:36

BX

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

Množstvo rovnakých znakov

v PHP, ASP

1

500

14.05.2011 10:53

Ďuri

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

MySQL kódovanie znakov

v Databázy

8

463

29.07.2013 12:29

DeiForm

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

Nespravne zobrazovanie znakov

v Redakčné systémy

1

671

12.10.2006 22:11

itsgoingd

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

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

Textarea limit znakov onkeypress

v JavaScript, VBScript, Ajax

4

1124

14.05.2019 22:13

neopagan

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

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

Vypísanie znakov v C

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

4

469

18.04.2012 20:48

Fico

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

nastavenie znakov na klávesnici

v Externé zariadenia

2

348

31.07.2014 11:12

DonnieBrasco

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

skratit retazec na 10 znakov

v PHP, ASP

2

580

11.03.2010 18:27

1daemon1

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

Aky hash - 11 znakov a =

v Ostatné

0

301

07.04.2012 23:17

exoomer



© 2005 - 2024 PCforum, edited by JanoF