IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Nositelka Změny:18.1.2020 19:33

V mnoha programovacích jazycích existuje nějaká jednoduchá funkce pro výpis, jako například printf() v C nebo echo() v PHP. V jazyce C zároveň pro konzolový vstup existuje funkce scanf(). Ani jedno z toho v C# neexistuje.

Zkusil jsem: Existuje sice metoda Console.Write­Line(), ale ta je trochu dlouhá (programátoři přece mají být líní, ne? :-) ). Zkoušela jsem i "using Console", jenže na Consoli (class) to bohužel nefunguje. O scanf ani nelze mluvit - tady nejde jen o parsování, třeba takové

scanf("%d%3s%f", &cele_cislo, text, &desetinne_cislo);
 /* načtení jednoho řádku v podobě celého čísla, tříznakového
textového řetězce a čísla desetinného, např. "23abc159.45" */

Něčeho takového v C# lze docílit jen mnoha řádky kódu, čímž se opět dostáváme do kolize s leností (i s chytrostí a šikovností - naprogramovat to opravdu není v mých silách). Navíc scanf() toho umí mnohem víc, a přesto ji používá snad opravdu jenom C a žádný další jazyk.

Chci docílit: Neexistuje pro Console.WriteLine() nějaký alias? Jako třeba pro int existuje System.Integer? A nejde alias alespoň vytvořit? Jako kdyby měl C# preprocesor jako C, no to by se to programovalo :-) . A nějakou C# obdobu scanf() bych taky ocenila. ;-)

Odpovědět
18.1.2020 19:33
j.k.j
Avatar
Odpovídá na Nositelka Změny
Ondřej Šrytr:18.1.2020 21:20

C nerovná se C#. Co existuje v C, nemusí existovat v C#. Je to prostě jiný jazyk a z pohledu úrovní programovacích jazyků je na vyšší úrovni. Nepracuje se zde s ukazateli, ale s referencemi.
Zápis Console.Write­Line() mi nepříjde dlouhý, při psaní si můžeš pomoct klávesou Tab, která automaticky doplní označený výraz, který nabízí nápověda. Pokud by tě zajímal formátovaný řetězec, doporučuji si něco o tom přečíst na stránkách Microsoftu.
Pro čtení vstupu z konzole se používá funkce Console.ReadLi­ne().

 
Nahoru Odpovědět
18.1.2020 21:20
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Nositelka Změny
DarkCoder:19.1.2020 1:41

Nic Ti nebrání vytvořit si v C svoji vlastní DLL knihovnu a používat ji v C#. Popř. si pro své potřeby vytvořit wrapper nad částí kódu který chceš zjednodušit.

Co se týká preprocesoru, preprocesor je v podstatě samostatný program, který je v C spouštěn překladačem v první fázi překladu. Takže i to si můžeš naprogramovat. :-)

Nahoru Odpovědět
19.1.2020 1:41
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Mirek Slouka
Člen
Avatar
Odpovídá na Nositelka Změny
Mirek Slouka:21.1.2020 10:29

Od C#6 můžeš použít

using static System.Console;

Potom můžeš používat její funkce jako Readline(); místo Console.Readline();

Psal o tom Patrik Valkovič zde.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
21.1.2020 10:29
I can explain it to you, but I can't understand it for you.
Avatar
Odpovídá na Mirek Slouka
Nositelka Změny:22.1.2020 19:50

No fakt to funguje. Tak to jsem ráda. Jistě, tabulátor je užitečný, ale takhle se to zkrátí tak na tři čtyři ťuknutí (z osmi nejméně, i s tabulátorem). Mimochodem, neříkám jsem, že C# je jako C, ale není náhodou třeba metoda TryParse s parametrem out náhodou totéž jako ukazatel v C? Mě to přijde hodně podobné, jenom C# je to určitě na vyšší úrovni a bezpečnější, protože ukazatele v C jsou prý někdy problém.

Nahoru Odpovědět
22.1.2020 19:50
j.k.j
Avatar
Ondřej Štorc
Tvůrce
Avatar
Odpovídá na Nositelka Změny
Ondřej Štorc:22.1.2020 22:01

Nevidím úplně důvod proč používat ten using jen kvůli šetření znaků, ale budiž...

out parametr bych spíš připodobnil k referencím u funkce v C++, ale to je jen opravdu hrubé přirovnání. Rozhodně se to nedá srovnávat s ukazatelem, který je akorát datový typ (a s tím spojené výhody a nástrahy), narozdíl od outu v C#.

Nahoru Odpovědět
22.1.2020 22:01
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.