Tu CS50x

Rozpoczęcie

CS50 IDE to internetowe „zintegrowane środowisko programistyczne”, które umożliwia programowanie „w chmurze”, bez instalowania jakiegokolwiek oprogramowania lokalnie. W rzeczywistości CS50 IDE zapewnia Ci Twój własny „obszar roboczy” (tj. miejsce do przechowywania danych), w którym możesz zapisywać własne pliki i foldery (aka katalogi).

Logowanie

Wejdź na stronę ide.cs50.io i kliknij „Sign in with GitHub”, aby uzyskać dostęp do CS50 IDE. Po załadowaniu IDE powinieneś zobaczyć, że (domyślnie) jest ono podzielone na trzy części. Na górze CS50 IDE znajduje się „edytor tekstu”, w którym będziesz pisał wszystkie swoje programy. Na dole znajduje się „okno terminala” (domyślnie jasnoniebieskie), interfejs wiersza poleceń (CLI), który pozwala na eksplorację plików i katalogów w przestrzeni roboczej, kompilację kodu, uruchamianie programów, a nawet instalację nowego oprogramowania. A po lewej stronie znajduje się „przeglądarka plików”, która pokazuje wszystkie pliki i foldery aktualnie znajdujące się w IDE.

Zacznij od kliknięcia w oknie terminala. Powinieneś zobaczyć, że jego „znak zachęty” przypomina poniższy.

~/ $

Kliknij wewnątrz tego okna terminala, a następnie wpisz

mkdir ~/pset1/

po czym Enter, aby utworzyć katalog (tj. folder) o nazwie pset1 w swoim katalogu domowym. Uważaj, aby nie przeoczyć spacji między mkdir a ~/pset1 lub jakiegokolwiek innego znaku w tej sprawie! Pamiętaj, że ~ oznacza twój katalog domowy, a ~/pset1 oznacza katalog o nazwie pset1 w ~.

Tutaj na zewnątrz, aby wykonać (tj. uruchomić) polecenie oznacza wpisanie go w oknie terminala, a następnie naciśnij Enter. W poleceniach uwzględniana jest wielkość liter, więc nie wpisuj wielkich liter, gdy masz na myśli małe lub odwrotnie.

Teraz wykonaj

cd ~/pset1/

aby przenieść się do (tj. otworzyć) ten katalog. Twój znak zachęty powinien teraz przypominać poniższy.

~/pset1/ $

Jeśli nie, prześledź swoje kroki i sprawdź, czy możesz określić, gdzie popełniłeś błąd.

Teraz wykonaj

mkdir ~/pset1/hello

, aby utworzyć nowy katalog o nazwie hello wewnątrz katalogu pset1. Następnie wykonaj polecenie

cd ~/pset1/hello

, aby przenieść się do tego katalogu.

Czy mamy napisać Twój pierwszy program? W menu Plik kliknij przycisk Nowy plik i zapisz go (za pomocą opcji Zapisz w menu Plik) jako hello.c w swoim katalogu ~/pset1/hello. Kontynuuj pisanie swojego pierwszego programu wpisując dokładnie te linie do pliku:

#include <stdio.h>int main(void){ printf("hello, world\n");}

Zauważ jak CS50 IDE dodaje „kolorowanie składni” (tj. kolor) podczas pisania, chociaż wybór kolorów CS50 IDE może się różnić od tego zestawu problemów. Kolory te nie są w rzeczywistości zapisane w samym pliku; są one po prostu dodawane przez CS50 IDE, aby wyróżnić pewną składnię. Gdybyś od początku nie zapisał pliku jako hello.c, CS50 IDE nie wiedziałoby (na podstawie rozszerzenia nazwy pliku), że piszesz kod C, w którym to przypadku te kolory byłyby nieobecne.

Listing Files

Następnie, w oknie terminala, zaraz na prawo od znaku zachęty (~/pset1/hello/ $), wykonaj

ls

Widzisz tylko hello.c? To dlatego, że właśnie wymieniłeś pliki w folderze hello. W szczególności, wykonałeś (tzn. uruchomiłeś) polecenie o nazwie ls, które jest skrótem od „list”. (Jest to tak często używane polecenie, że jego autorzy nazwali je po prostu ls, aby zaoszczędzić naciśnięć klawiszy). Ma to sens?

Kompilowanie programów

Teraz, zanim będziemy mogli wykonać program hello.c, przypomnijmy sobie, że musimy go skompilować za pomocą kompilatora (np. clang), tłumacząc go z kodu źródłowego na kod maszynowy (czyli zera i jedynki). Wykonaj poniższe polecenie, aby to zrobić:

clang hello.c

A następnie wykonaj je ponownie:

ls

Tym razem powinieneś zobaczyć nie tylko hello.c, ale także a.out na liście? (To dlatego, że clang przetłumaczył kod źródłowy w hello.c na kod maszynowy w a.out, co oznacza „wyjście asemblera”, ale więcej na ten temat innym razem.

Teraz uruchom program, wykonując poniższe polecenie.

./a.out

Witaj, świecie, w rzeczy samej!

Nazwy programów

Teraz, a.out nie jest najbardziej przyjazną nazwą dla programu. Skompilujmy hello.c ponownie, tym razem zapisując kod maszynowy w pliku o nazwie, bardziej trafnej, hello. Wykonaj poniższy kod.

clang -o hello hello.c

Uważaj, aby nie przeoczyć żadnej z tych spacji! Następnie wykonaj to jeszcze raz:

ls

Powinieneś teraz zobaczyć nie tylko hello.c (i a.out z poprzedniej listy), ale także hello? To dlatego, że -o jest argumentem wiersza poleceń, czasami znanym jako flaga lub przełącznik, który mówi clang, aby wyprowadził (stąd o) plik o nazwie hello. Wykonaj poniższe polecenie, aby wypróbować nowo nazwany program.

./hello

Witaj ponownie!

Ułatwianie spraw

Przypomnij sobie, że możemy zautomatyzować proces wykonywania clang, pozwalając make dowiedzieć się, jak to zrobić za nas, oszczędzając w ten sposób trochę naciśnięć klawiszy. Wykonaj poniższe polecenie, aby skompilować ten program po raz ostatni.

make hello

Powinieneś zauważyć, że make wykonuje clang z jeszcze większą liczbą argumentów wiersza poleceń dla ciebie? Więcej o nich także innym razem!

Teraz wykonaj sam program po raz ostatni, wykonując poniższe polecenie.

./hello

Phew!

Getting User Input

Dość powiedzieć, że bez względu na to, jak skompilujesz lub wykonasz ten program, zawsze wypisuje on tylko hello, world. Zmodyfikujmy ten program tak, aby najpierw zapytał użytkownika o jego imię, a następnie wypisał hello, so-and-so, gdzie so-and-so jest jego prawdziwym imieniem.

Tak jak poprzednio, upewnij się, że skompilowałeś swój program z:

make hello

I upewnij się, że wykonałeś swój program, testując go kilka razy z różnymi danymi wejściowymi, z:

./hello

Walkthrough

Podpowiedzi

Nie pamiętasz, jak zapytać użytkownika o jego imię?

Przypomnij sobie, że możesz użyć get_string w następujący sposób, przechowując jego wartość zwracaną w zmiennej o nazwie name typu string.

string name = get_string("What is your name?\n");

Nie pamiętasz, jak sformatować ciąg znaków?

Nie pamiętasz, jak złączyć (tj, konkatenować) nazwę użytkownika z powitaniem? Przypomnij sobie, że możesz użyć printf nie tylko do drukowania, ale i do formatowania ciągu znaków (stąd f w printf), a la poniższy fragment, w którym name jest string.

printf("hello, %s\n", name);

Użycie niezadeklarowanego identyfikatora?

Patrząc na poniższy fragment, może na inne błędy?

error: use of undeclared identifier 'string'; did you mean 'stdin'?

Przypomnij sobie, że aby użyć get_string, musisz dołączyć cs50.h (w którym get_string jest zadeklarowany) na szczycie pliku, jak w przypadku:

#include <cs50.h>

How to Test Your Code

Wykonaj poniższe czynności, aby ocenić poprawność swojego kodu przy użyciu check50. Ale pamiętaj, aby go skompilować i przetestować!

check50 cs50/problems/2020/x/hello

Wykonaj poniższe polecenie, aby ocenić styl swojego kodu, używając style50.

style50 hello.c

Jak przesłać

Wykonaj poniższe polecenie, logując się za pomocą swojej nazwy użytkownika i hasła z GitHuba, gdy zostaniesz o to poproszony. Dla bezpieczeństwa, zobaczysz gwiazdki (*) zamiast rzeczywistych znaków w haśle.

submit50 cs50/problems/2020/x/hello

.

Dodaj komentarz