Kontrola argumentu – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Kontrola argumentu – C / C++ – Fórum – Programujte.comKontrola argumentu – C / C++ – Fórum – Programujte.com

 

vazbok0
Newbie
21. 11. 2014   #1
-
0
-

Dobrý den, chtěl bych se zeptat, jak zprovoznit kód níže. Chtěl bych porovnat, zdali argument je větší jako 1. Zkoušel jsem to porovnat i s ASCII hodnotou a i tak to nefuguje. Děkuji za jakoukoliv pomoc

if (argv[2] >1)

Nahlásit jako SPAM
IP: 90.181.188.–
KIIV
~ Moderátor
+43
God of flame
21. 11. 2014   #2
-
0
-

argument je retezec, tak musis nejprve prevest na cislo

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
vazbok0
Newbie
21. 11. 2014   #3
-
0
-

ajo, děkuji. a co kdybych chtěl zjistit, zdali je argument číslo?

Nahlásit jako SPAM
IP: 90.181.188.–
KIIV
~ Moderátor
+43
God of flame
21. 11. 2014   #4
-
0
-

muzes pouzit treba prochazeni cyklem a funkci isnumeric, nebo si to kontrolovat sam.. moznosti je spousta

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
21. 11. 2014   #5
-
0
-

zkusit zkonvertovat na číslo např pomocí sscanf a testovat návratovou hodnotu

hu

Nahlásit jako SPAM
IP: 2001:67c:1222:800:4034:ab...–
vazbok0
Newbie
21. 11. 2014   #6
-
0
-

děkuji moc za rady. už jsem to vyřešil. ještě jsem se chtěl zeptat, jak jde číslo např. 2.345689 ořezat jen na 2 desetinná místa?

Nahlásit jako SPAM
IP: 90.181.188.–
21. 11. 2014   #7
-
0
-
Nahlásit jako SPAM
IP: 2001:67c:1222:800:4034:ab...–
ondrej39+1
Věrný člen
21. 11. 2014   #8
-
0
-

Případně to jde "složitěji" přes funkci round round(2.345689*100)/100 a vyjde ti taky číslo zaokrouhlené na dvě desetinná místa.

Nahlásit jako SPAM
IP: 46.39.172.–
Inject all the dependencies!
21. 11. 2014   #9
-
0
-

#8 ondrej39
to je přímo zaokrouhlení. Mnou uvedené funkce to uříznou ve výpisu, obsah proměnné však zůstane nezměněný.

hu

Nahlásit jako SPAM
IP: 2001:67c:1222:800:4034:ab...–
ondrej39+1
Věrný člen
21. 11. 2014   #10
-
0
-

#9 hlucheucho
hu, a umí to printf i přímo nějak zaokrouhlit? Nebo prostě vyloženě funguje jako výpis? Printf moc nepoužívám, někde jsem četl, že je pro C++ obskurní a je lepší používat normálně cout.

Nahlásit jako SPAM
IP: 46.39.172.–
Inject all the dependencies!
21. 11. 2014   #11
-
0
-

Jde to i jako manipulace s řetězci:

1. Najdeš des. oddělovač v řetězci např. funkcí strchr
2. Posuneš ukazatel na třetí znak za oddělovačem des. míst a přepíšeš ho na 0x00, zde musíš kontrolovat, zda má řetězec tolik znaků

hu

Nahlásit jako SPAM
IP: 2001:67c:1222:800:4034:ab...–
ondrej39+1
Věrný člen
21. 11. 2014   #12
-
0
-

#11 hlucheucho
A co se C++ týče, myslíš si, že má smysl používat Cčkový printf, nebo normálně používat cout? Osobně považuji cout za mnohem srozumitelnější.

Nahlásit jako SPAM
IP: 46.39.172.–
Inject all the dependencies!
21. 11. 2014   #13
-
0
-

#10 ondrej39
printf je jen výpis, sprintf totéž udělá do řetězce a fprintf do souboru. Buď používám toto nebo metody komponent z VCL u C++ Builderu. Jak by se formátovalo u cout netuším.

hu

Nahlásit jako SPAM
IP: 2001:67c:1222:800:4034:ab...–
ondrej39+1
Věrný člen
21. 11. 2014   #14
-
0
-

#13 hlucheucho
Se zápisem do souborů a výpisem z nich zrovna teď dělám ve škole, děláme to přes fstream (vyžaduje danou knihovnu), na vypsání do stringu pak používám sstream. Moc se mi u toho nelíbí, že si člověk musí vytvářet objekty, aby vůbec funkci mohl používat (tedy třeba ifstream input_file, nebo stringstream prevedeny_retezec), pokud to chápu správně, sprintf a fprintf tuto tvorbu nevyžadují.

Nahlásit jako SPAM
IP: 46.39.172.–
Inject all the dependencies!
21. 11. 2014   #15
-
0
-

http://stackoverflow.com/questions/11226143/formatting-output-in-c  
cout umí formátování také, ale působí to na mne "odstrašujícím" dojmem. 

Pro fprintf musíš mít otevřený soubor, funkci předáváš jako parametr ukazatel FILE*. Pro sprintf potřebuješ mít cílový řetězec, funkci předáváš jako parametr ukazatel char*.

Objekty mohou v sobě nést užitečné funkce, sám si ošetří alokování paměti podle délky řetězce, postará se o uvolnění paměti při svém zániku, ... , ale nese to sebou i nevýhody, třeba větší objem kódu, vyšší nároky na výkon CPU, zabere více paměti... Právě ty nevýhody mohou třeba na jednočipu převážit a vést k použití klasických C funkcí nebo dokonce k tvorbě vlastních funkcí které mají jen fragment chování které by měla C funkce (na 8051 jsem toto dělal u funkce sprintf, měla strašný nároky na paměť)

hu

Nahlásit jako SPAM
IP: 2001:67c:1222:800:4034:ab...–
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, 14 hostů

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ý