Stránka: 1 z 1
| [ Príspevkov: 13 ] | |
Autor | Správa |
---|
Registrovaný: 15.10.11 Prihlásený: 07.03.12 Príspevky: 13 Témy: 6 | 6 |
Prosim niekoho o radu... Jedna vec mi nefunguje a neviem ako na nu... Davam tu taku zjednodusenu verziu :
Kód: int nacitanie() { int i = 5; return i; }
int sekundy(int argc, char *argv[]) { if (argc == 2) if (strcmp("-s", argv[1]) == 0) { int sek; nacitanie(); sek = nacitanie (); return 0; } }
No, toto je vlastne prvy problem, mozem to sek = nacitanie(); spravit? Asi nie, lebo to nefunguje... Potom teda ako do premennej dostanem to co funkcia nacitanie vyreturnovala? ![:(](https://www.pcforum.sk/images/smilies/smile18.gif) Dakujem pekne
|
|
Registrovaný: 27.12.08 Prihlásený: 13.12.22 Príspevky: 1874 Témy: 96 | 96 Bydlisko: Bratislava,... |
1. medzi nacitanie a (); mas medzeru, preto ti to nejde
2. riadok nacitanie() je zbytocny, takto sa ti funkcia nacitanie(); zavola dvakrat
3. môžeš spraviť aj niečo ako "int sek = nacitanie();" a skrátiť si program
4. keď už skracuješ program, keďže funkcia sekundy nič nevracia (resp. vracia za každých okolností 0), kľudne môže byť typu void a nemusíš tam mať riadok "return 0;"
_________________ ~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) |
|
Registrovaný: 09.04.11 Prihlásený: 11.01.14 Príspevky: 257 Témy: 26 | 26 Bydlisko: Kesa |
Takže to že za nacitanie a () nemá byť medzera je blbosť. Práveže sa doporučuje, aby tam vždy bola medzera za priehľadnosť programu. Funckia načítanie je ti úplne zbytočná, keďže v nej len priradíš jednu hodnotu, čo môže kľudne urobiť v hlavnej funkcii (neni to zle čo si napísal, ale je to úplne zbytočné ). Ale čo je problém, voláš dva krát if za sebou. Ono by to ani nebol ani taký problém, ale ten druhý if je zahrnutý v tom prvom, takže za ten prvý if musíš dať zátvorku {. To načo si sa pýtal (na to sek = nacitanie (); ), tak funkcia musí mať parametre, ktoré do nej dávaš. Takže v tvojem prípade, tvoja funkcia nevie, čo je to to nacitanie ()
A nBXXL má pravdu, že si tú funkciu zavoláš 2 krát, takže to prvé nacitanie () vyhodz.
_________________ 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ý: 13.11.07 Prihlásený: 20.08.16 Príspevky: 1702 Témy: 0 | 0 |
street_punk píše: Takže to že za nacitanie a () nemá byť medzera je blbosť. Práveže sa doporučuje, aby tam vždy bola medzera za priehľadnosť programu. Kto to doporučuje? Napr. v K&R "štýle" sa nič také neodporúča a podľa mňa je to extrémne neprehľadné. ![:)](https://www.pcforum.sk/images/smilies/smile02.gif)
|
|
Registrovaný: 27.12.08 Prihlásený: 13.12.22 Príspevky: 1874 Témy: 96 | 96 Bydlisko: Bratislava,... |
@street_punk: tak to sorry, som nevedel, že tam tá medzera môže byť, mňa tak učili že to musí byť bez medzery.. (a chrono má pravdu že je to prehľadnejšie, keď tam tá medzera nie je...)
ale zase to, čo ty píšeš sú tiež blbosti:
1. pokiaľ v ife máš len jeden príkaz (v tomto prípade ďalší if) tak tam zátvorky byť nemusia.. (predpokladám, že autorovým cieľom bolo to, aby sa príkazy spĺňali iba vtedy, pokiaľ sú splnené obe podmienky, a aby sa netestovalo na druhú, pokiaľ nie je splnená prvá)..
2. žiadna funkcia nemusí mať parametre, táto ani nemá, takže funkcia vie, čo je to nacitanie()....
teda program ako tento:
Kód: #include <cstdio>
int blbost() { int i = 5; return i; }
int main() { if (true) if (true) { int sek = blbost (); printf("%d\n",sek); return 0; } }
skutočne vypíše 5...
_________________ ~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) |
|
Registrovaný: 15.10.11 Prihlásený: 07.03.12 Príspevky: 13 Témy: 6 | 6 |
Tu medzeru som do programu nenapisala, to sa mi nejako tu az podarilo.. V tej funkcii nacitanie nie je iba to priradenie, len som to chcela zjednodusit nech tu nevypisujem milion riadkov, princip je ten ale ten isty- funkcia returnuje nejaky int (ziadne parametre nema). Dakujem vam za rady, dnes vecer budem s programom pokracovat, keby mi nieco nejde, urcite sa zasa ozvem
nBXXL, ano presne tak je mysleny ten if a aj funguje ![:)](https://www.pcforum.sk/images/smilies/smile02.gif)
|
|
Registrovaný: 09.04.11 Prihlásený: 11.01.14 Príspevky: 257 Témy: 26 | 26 Bydlisko: Kesa |
Tak k tým medzerám, napríklad Pavol Herout uvádza, že je lepšie nechávať medzery. Tak isto aj v škole nás tak učia. A je to aj môj osobný názor, že je tak kód priehľadnejší. Ale to že či tam tú medzeru dá, alebo nedá, programu nijak neublíži.
A stým if, je lepšie tam dať tie zátvorky hneď po napísaní if (urobiť si šablónu) a potom mať istotu, že sa nepomýli.
_________________ 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ý: 15.10.11 Prihlásený: 07.03.12 Príspevky: 13 Témy: 6 | 6 |
Tie veci, co mi nesli som uz vyriesila, ale zase je nieco dalsie... Nechcem tu zbytocne zakladat niekolko tem, tak to dam sem. Toto nacitanie zatial robi to, ze pokial clovek zada nieco ine ako cislo (napriklad "dfsahfdas" alebo "53153fdsfds13") tak program vypise to "musis zadat kladne cislo".
Problem je, ze do toho neviem zakomponovat 2 veci, vcera a dneska sa o to pokusam a vzdy mi to niekde zlyhalo ![:roll:](https://www.pcforum.sk/images/smilies/smile05.gif) V pripade prazdneho vstupu musi byt vystup tiez vygeneruje prazdny vystup. Teraz mi tam pri zadani enteru vypise 0 sekund. Druhy problem je, ze neviem, ako zistit, ci je cislo vacsie ako ULONG_MAX...lebo samotna ta podmienka je blbost, cislo nemoze byt vacsie.. No proste neviem sa pohnut dalej... Keby mi niekto vedel s tymto poradit, bola by som moc vdacna..
Kód: long int nacitanie() { long int cislo=0; char c; while ((c = getchar()) != '\n') { if (c >= ascii0 && c <= ascii9) { cislo = cislo * 10; cislo = cislo + (c-ascii0); } else if (c != '\n') { cislo = -1; break; } } if (cislo == -1) { printf("musis zadat kladne cislo\n");} return cislo; }
|
|
Registrovaný: 11.01.09 Prihlásený: 09.02.25 Príspevky: 1397 Témy: 10 | 10 Bydlisko: Hrinova |
K prvej otazke, cize osetrenie prazdneho vstupu, si mozes pridat pomocnu premennu uchovavajucu stav, ci bolo nieco zadane alebo nie (dalo by sa to aj elegantnejsie, ale to by si musela prerabat asi celu funkciu):
Kód: long int nacitanie() { long int cislo=0; int vstup = 0; /* v tejto premennej bude nula pokial sa nezada cokolvek okrem enteru */ char c; while ((c = getchar()) != '\n') { vstup = 1; /* getchar() nenacital enter, takze zmenime premennu na jednotku */ if ( c >= 0x30 && c <= 0x39 ) { cislo = cislo * 10; cislo = cislo + ( c - 0x30 ); } else if (c != '\n') { cislo = -1; break; } } if (cislo == -1) printf("musis zadat kladne cislo\n"); if (vstup == 0) /* a tu uz iba staci porovnat, ci je vstup nula */ printf("prazdny vstup\n");
return cislo;
} A druha otazka sa riesila prednedavnom tu --> http://www.pcforum.sk/zistenie-ci-je-cislo-vacsie-ako-ulong-max-vt122291.htmlCize mozes to vyriesit ako tam, ze bud pouzijes pretypovanie s pouzitim vacsieho datoveho typu: Kód: if ( (double)( cislo * 10 ) > ULONG_MAX ) alebo vydelenim ULONG_MAX desiatimi: Kód: if ( cislo > ( ULONG_MAX / 10 ) )
|
|
Registrovaný: 15.10.11 Prihlásený: 07.03.12 Príspevky: 13 Témy: 6 | 6 |
Dakujem, viem, ze moje riesenie asi nebude extra elegantne, bohuzial som zaciatocnicka ![:oops:](https://www.pcforum.sk/images/smilies/smile15.gif) Preto mam aj dalsiu otazku... Nejako mi to nefunguje s tym ULONG_MAX. Ked zadam ozaj prilis velke cislo, tak mi to normalne vypise chybovu hlasku, ale ked zadam napriklad tu hodnotu ULONG_MAX alebo o nieco mensiu, tak mi to nevypise vobec nic
Kód: long int nacitanie() { long int cislo=0; int vstup = 0; /* v tejto premennej bude nula pokial sa nezada cokolvek okrem enteru */ char c; while ((c = getchar()) != '\n') { vstup = 1; /* getchar() nenacital enter, takze zmenime premennu na jednotku */ if ( c >= 0x30 && c <= 0x39 ) { if ( cislo > ( ULONG_MAX / 10 ) ) { pom = -2; break;} cislo = cislo * 10; cislo = cislo + ( c - 0x30 ); } else if (c != '\n') { cislo = -1; break; } } if (cislo == -1) printf("musis zadat kladne cislo\n"); if (vstup == 0) /* a tu uz iba staci porovnat, ci je vstup nula */ printf("prazdny vstup\n");
return cislo;
}
Asi mam tu podmienku na zlom mieste? alebo kde je chyba?
|
|
Registrovaný: 27.12.08 Prihlásený: 13.12.22 Príspevky: 1874 Témy: 96 | 96 Bydlisko: Bratislava,... |
ta podmienka by mala byt medzi Kód: cislo = cislo * 10; a Kód: cislo = cislo + (c - 0x30)
_________________ ~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) |
|
Registrovaný: 13.11.07 Prihlásený: 20.08.16 Príspevky: 1702 Témy: 0 | 0 |
Inak pomocou tak jednoduchej podmienky sa, pravdepodobne (nechce sa mi to skúšať), nepodarí dať do tej premennej presne ULONG_MAX, pretože je tam zaokrúhľovanie pri delení (takže teoreticky by asi bolo možné najskôr tú novú cifru odpočítať od ULONG_MAX a až potom to deliť, prípadne pri cislo == ULONG_MAX/10 kontrolovať, či je c <= ULONG_MAX % 10).
|
|
Registrovaný: 27.12.08 Prihlásený: 13.12.22 Príspevky: 1874 Témy: 96 | 96 Bydlisko: Bratislava,... |
ignoruj môj predchádzajúci príspevok, zle som pochopil ten kód ![:D](https://www.pcforum.sk/images/smilies/smile01.gif) tú podmienku máš na dobrom mieste.. chrono dobre vysvetlil, prečo ti tam nejde zadať číslo ULONG_MAX alebo trocha menšie/väčšie čísla, pokiaľ je ULONG_MAX napr. 9005 a chceš tam zadať 9000-9009, tak v tvojej podmienke vyjde 900 == 900, čo podmienku spĺňa (lebo tam máš iba >), teda ošetri ešte prípad, že cislo == ULONG_MAX/10, pridaním podmienky, či (c-0x30) <= (ULONG_MAX % 10)
_________________ ~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: 13 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v Audio programy | 3 | 460 | 30.07.2012 22:57 p4tooo | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v Audio programy | 1 | 2210 | 03.06.2007 20:59 fuco | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v Kultúra, umenie, filmy, hudba, história, média | 0 | 358 | 24.11.2019 9:11 fixa | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v PHP, ASP | 2 | 499 | 13.02.2009 13:50 beginner | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v Assembler, C, C++, Pascal, Java | 4 | 384 | 06.12.2014 19:57 chrono | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v Ovládače | 0 | 1103 | 05.10.2008 17:19 konig | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v JavaScript, VBScript, Ajax | 3 | 440 | 20.05.2013 0:05 shaggy | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v JavaScript, VBScript, Ajax | 2 | 684 | 31.01.2009 15:27 Flety | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v Ostatné | 3 | 409 | 28.12.2012 20:24 JanoF | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v Krčma | 7 | 2165 | 24.10.2009 20:45 InVader | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v Grafické programy | 2 | 5030 | 23.03.2008 20:35 pepek.namornik | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v Perl, Python, Ruby, CGI | 1 | 2138 | 18.07.2010 16:14 ado21 | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read_hot.gif) | v Android, iOS, Windows Phone (Mobile) | 13 | 590 | 23.03.2014 14:57 emkej8 | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v PHP, ASP | 2 | 532 | 28.09.2008 20:55 javo | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v Delphi, Visual Basic | 0 | 806 | 01.07.2019 11:06 teddy3005 | ![V tomto fóre nie sú ďalšie neprečítané témy. V tomto fóre nie sú ďalšie neprečítané témy.](https://www.pcforum.sk/styles/white/imageset/topic_read.gif) | v Assembler, C, C++, Pascal, Java | 6 | 423 | 26.11.2012 16:42 silentasflash |
|