Začínáme
CS50 IDE je webové „integrované vývojové prostředí“, které umožňuje programovat „v cloudu“, aniž byste museli lokálně instalovat jakýkoli software. CS50 IDE vám totiž poskytuje váš vlastní „pracovní prostor“ (tj. úložný prostor), do kterého můžete ukládat své vlastní soubory a složky (tzv. adresáře).
Přihlášení
Navštivte stránku ide.cs50.io a kliknutím na „Sign in with GitHub“ získáte přístup k prostředí CS50 IDE. Po načtení IDE byste měli vidět, že je (ve výchozím nastavení) rozděleno do tří částí. V horní části CS50 IDE je váš „textový editor“, kde budete psát všechny své programy. Směrem dolů je „okno terminálu“ (ve výchozím nastavení světle modré), rozhraní příkazového řádku (CLI), které vám umožní prozkoumávat soubory a adresáře vašeho pracovního prostoru, kompilovat kód, spouštět programy a dokonce instalovat nový software. A vlevo je váš „prohlížeč souborů“, který zobrazuje všechny soubory a adresáře, které se aktuálně nacházejí ve vašem IDE.
Začněte kliknutím uvnitř okna terminálu. Měli byste zjistit, že jeho „prompt“ se podobá níže uvedenému.
~/ $
Klikněte uvnitř tohoto terminálového okna a poté zadejte
mkdir ~/pset1/
následovaný Enterem, abyste vytvořili adresář (tj. složku) s názvem pset1
ve svém domovském adresáři. Dejte pozor, abyste nepřehlédli mezeru mezi mkdir
a ~/pset1
nebo jakýkoli jiný znak! Mějte na paměti, že ~
označuje váš domovský adresář a ~/pset1
označuje adresář s názvem pset1
v rámci ~
.
Příkaz spustit (tj. spustit) znamená napsat jej do okna terminálu a stisknout klávesu Enter. Příkazy „rozlišují velká a malá písmena“, takže nezapomeňte psát velká písmena, když myslíte malá, nebo naopak.
Nyní proveďte
cd ~/pset1/
abyste se přesunuli do (tj. otevřeli) daného adresáře. Vaše výzva by nyní měla vypadat jako níže.
~/pset1/ $
Pokud tomu tak není, zopakujte své kroky a zkuste zjistit, kde jste udělali chybu.
Nyní proveďte
mkdir ~/pset1/hello
pro vytvoření nového adresáře s názvem hello
uvnitř vašeho adresáře pset1
. Pak proveďte
cd ~/pset1/hello
abyste se do tohoto adresáře přesunuli.
Máme vám napsat váš první program? V nabídce Soubor klikněte na Nový soubor a uložte jej (jako přes volbu Uložit v nabídce Soubor) jako hello.c
uvnitř svého adresáře ~/pset1/hello
. Pokračujte v psaní svého prvního programu tak, že do souboru napíšete přesně tyto řádky:
#include <stdio.h>int main(void){ printf("hello, world\n");}
Všimněte si, jak prostředí CS50 IDE přidává při psaní „zvýraznění syntaxe“ (tj. barvy), i když volba barev v prostředí CS50 IDE se může lišit od této sady úloh. Tyto barvy nejsou ve skutečnosti uloženy uvnitř samotného souboru; jsou pouze přidány prostředím CS50 IDE, aby vynikla určitá syntaxe. Kdybyste soubor od začátku neuložili jako hello.c
, CS50 IDE by nepoznal (podle přípony názvu souboru), že píšete kód v jazyce C, a v takovém případě by tyto barvy chyběly.
Listování souborů
Následující, v okně terminálu, hned napravo od výzvy (~/pset1/hello/ $
), spusťte
ls
Měli byste vidět právě hello.c
? To proto, že jste právě vypsali soubory ve složce hello
. Konkrétně jste provedli (tj. spustili) příkaz s názvem ls
, což je zkratka pro „seznam“. (Je to tak často používaný příkaz, že ho jeho autoři nazvali jen ls
, aby ušetřili stisk kláves.) Dává to smysl?“
Kompilování programů
Nyní, než budeme moci program hello.c
spustit, připomeňme, že jej musíme zkompilovat pomocí překladače (např. clang
), který jej převede ze zdrojového kódu do strojového kódu (tj. nul a jedniček). Spusťte následující příkaz, který to udělá:
clang hello.c
A pak tento příkaz spusťte znovu:
ls
Tentokrát byste měli vidět nejen hello.c
, ale i a.out
v seznamu? (Totéž můžete vidět graficky, pokud znovu kliknete na ikonu této složky.) To proto, že clang
přeložil zdrojový kód v hello.c
do strojového kódu v a.out
, což shodou okolností znamená „výstup assembleru“, ale o tom až jindy.
Teď spusťte program spuštěním níže uvedeného příkazu.
./a.out
Zdravím tě, světe, vskutku!“
Pojmenování programů
No, a.out
není zrovna uživatelsky nejpřívětivější název programu. Zkompilujme hello.c
znovu, tentokrát uložíme strojový kód do souboru nazvaného výstižněji hello
. Spusťte následující příkaz.
clang -o hello hello.c
Dejte pozor, abyste v něm nepřehlédli žádnou z těch mezer! Pak znovu proveďte tento:
ls
Měli byste nyní vidět nejen hello.c
(a a.out
z předchozího), ale také hello
uvedené? To proto, že -o
je argument příkazového řádku, někdy známý jako příznak nebo přepínač, který říká clang
, aby vypsal (proto o
) soubor s názvem hello
. Spusťte níže uvedený příkaz a vyzkoušejte nově pojmenovaný program.
./hello
Zdravím vás ještě jednou!
Ulehčení práce
Připomeňme si, že proces spuštění clang
můžeme automatizovat a nechat make
, aby zjistil, jak to udělat za nás, čímž nám ušetří několik stisků kláves. Spusťte níže uvedený příkaz pro poslední kompilaci tohoto programu.
make hello
Měli byste si všimnout, že make
provede clang
s ještě více argumenty příkazového řádku za vás? O těch také někdy příště!
Nyní naposledy spusťte samotný program spuštěním níže.
./hello
Uf!“
Získání uživatelského vstupu
Už stačí říci, že ať tento program zkompilujete nebo spustíte jakkoli, vždy vypíše pouze hello, world
. Trochu si ho přizpůsobíme, stejně jako jsme to dělali v hodině.
Upravte tento program tak, aby se nejprve zeptal uživatele na jeho jméno a poté vypsal hello, so-and-so
, kde so-and-so
je jeho skutečné jméno.
Stejně jako předtím nezapomeňte svůj program zkompilovat pomocí:
make hello
A nezapomeňte svůj program spustit a několikrát ho otestovat s různými vstupy pomocí:
./hello
Procházka
Nápovědy
Nevzpomínáte si, jak vyzvat uživatele k zadání jména?
Připomeňte si, že get_string
můžete použít následujícím způsobem, přičemž jeho návratovou hodnotu uložíte do proměnné name
typu string
.
string name = get_string("What is your name?\n");
Nevzpomínáte si, jak formátovat řetězec?
Nevzpomínáte si, jak spojit (tj, spojit) jméno uživatele s pozdravem? Vzpomeňte si, že printf
můžete použít nejen k vypsání, ale i k formátování řetězce (proto f
v printf
), a la níže, kde name
je string
.
printf("hello, %s\n", name);
Použití nedeklarovaného identifikátoru?
Vidíte níže, možná nahoře další chyby?
error: use of undeclared identifier 'string'; did you mean 'stdin'?
Připomeňte si, že abyste mohli použít get_string
, musíte na vrchol souboru zařadit cs50.h
(ve kterém je get_string
deklarován), jako například:
#include <cs50.h>
Jak otestovat svůj kód
Provedením níže uvedeného vyhodnotíte správnost svého kódu pomocí check50
. Nezapomeňte jej však také sami zkompilovat a otestovat!
check50 cs50/problems/2020/x/hello
Vykonejte níže uvedený postup pro vyhodnocení stylu vašeho kódu pomocí style50
.
style50 hello.c
Jak odeslat
Vykonejte níže uvedený postup a po výzvě se přihlaste svým uživatelským jménem a heslem GitHub. Kvůli bezpečnosti se místo skutečných znaků v hesle zobrazí hvězdičky (*
).
submit50 cs50/problems/2020/x/hello
.