Stránka: 1 z 1
| [ Príspevkov: 10 ] | |
Autor | Správa |
---|
Registrovaný: 08.09.11 Prihlásený: 17.09.11 Príspevky: 11 Témy: 4 | 4 |
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)
|
|
Registrovaný: 11.01.09 Prihlásený: 04.05.24 Príspevky: 1385 Témy: 9 | 9 Bydlisko: Hrinova |
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;
}
|
|
Registrovaný: 08.09.11 Prihlásený: 17.09.11 Príspevky: 11 Témy: 4 | 4 |
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...
|
|
Registrovaný: 11.01.09 Prihlásený: 04.05.24 Príspevky: 1385 Témy: 9 | 9 Bydlisko: Hrinova |
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?
|
|
Registrovaný: 08.09.11 Prihlásený: 17.09.11 Príspevky: 11 Témy: 4 | 4 |
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.
|
|
Registrovaný: 09.04.11 Prihlásený: 11.01.14 Príspevky: 257 Témy: 26 | 26 Bydlisko: Kesa |
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 |
|
Registrovaný: 08.09.11 Prihlásený: 17.09.11 Príspevky: 11 Témy: 4 | 4 |
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); }
|
|
Registrovaný: 09.04.11 Prihlásený: 11.01.14 Príspevky: 257 Témy: 26 | 26 Bydlisko: Kesa |
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 |
|
Registrovaný: 08.09.11 Prihlásený: 17.09.11 Príspevky: 11 Témy: 4 | 4 |
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.
|
|
Registrovaný: 27.12.08 Prihlásený: 13.12.22 Príspevky: 1874 Témy: 96 | 96 Bydlisko: Bratislava,... |
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) |
|
Stránka: 1 z 1
| [ Príspevkov: 10 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v PHP, ASP | 3 | 551 | 27.07.2007 7:56 zero0x | | v Ostatné programy | 0 | 354 | 26.04.2011 10:13 kati123 | | v Assembler, C, C++, Pascal, Java | 26 | 3987 | 15.03.2011 13:47 katiMIR | | v Operačné systémy Microsoft | 0 | 369 | 16.05.2010 18:20 sasori1512 | | v Operačné systémy Microsoft | 2 | 2437 | 18.11.2009 19:36 Lukas9 | | v PHP, ASP | 5 | 283 | 30.04.2013 15:36 BX | | v PHP, ASP | 1 | 500 | 14.05.2011 10:53 Ďuri | | v Databázy | 8 | 463 | 29.07.2013 12:29 DeiForm | | v Redakčné systémy | 1 | 671 | 12.10.2006 22:11 itsgoingd | | v Assembler, C, C++, Pascal, Java | 6 | 565 | 09.05.2014 12:04 Lukys12345 | | v JavaScript, VBScript, Ajax | 4 | 1124 | 14.05.2019 22:13 neopagan | | v Ostatné | 3 | 502 | 06.04.2009 17:11 exoomer | | v Assembler, C, C++, Pascal, Java | 4 | 469 | 18.04.2012 20:48 Fico | | v Externé zariadenia | 2 | 348 | 31.07.2014 11:12 DonnieBrasco | | v PHP, ASP | 2 | 580 | 11.03.2010 18:27 1daemon1 | | v Ostatné | 0 | 301 | 07.04.2012 23:17 exoomer |
|