Kezdőlapok
A CS50 IDE egy webalapú “integrált fejlesztőkörnyezet”, amely lehetővé teszi, hogy “a felhőben” programozzon, anélkül, hogy helyileg bármilyen szoftvert telepítene. Sőt, a CS50 IDE saját “munkaterületet” (azaz tárhelyet) biztosít, ahová saját fájljait és mappáit (más néven könyvtárakat) mentheti.
Bejelentkezés
Lépjen az ide.cs50.io oldalra, és kattintson a “Sign in with GitHub” gombra a CS50 IDE eléréséhez. Amint betöltődik az IDE, látnod kell, hogy (alapértelmezés szerint) három részre van osztva. A CS50 IDE tetején található a “szövegszerkesztő”, ahová az összes programodat írni fogod. Az alsó részen található a “terminálablak” (alapértelmezés szerint világoskék színű), egy parancssori felület (CLI), amely lehetővé teszi a munkaterület fájljainak és könyvtárainak felfedezését, a kód fordítását, a programok futtatását és akár új szoftverek telepítését is. Balra pedig a “fájlböngésző”, amely az IDE-ben jelenleg található összes fájlt és mappát mutatja.
Kezdje a terminálablakon belüli kattintással. Azt kell látnod, hogy a “prompt” az alábbiakhoz hasonlít.
~/ $
Kattints a terminálablakon belülre, majd írd be
mkdir ~/pset1/
és utána az Entert, hogy létrehozz egy pset1
nevű könyvtárat (azaz mappát) az otthoni könyvtáradban. Vigyázzon, hogy ne hagyja figyelmen kívül a mkdir
és ~/pset1
közötti szóközt, vagy bármilyen más karaktert! Tartsd észben, hogy a ~
az otthoni könyvtáradat jelöli, a ~/pset1
pedig a ~
-n belül a pset1
nevű könyvtárat.
A továbbiakban egy parancs végrehajtása (azaz futtatása) azt jelenti, hogy beírod azt egy terminálablakba, majd megnyomod az Entert. A parancsok “nagybetű-érzékenyek”, ezért ügyeljünk arra, hogy ne írjuk be nagybetűvel, amikor kisbetűsre gondolunk, vagy fordítva.
Most execute
cd ~/pset1/
mivel beköltözünk (azaz megnyitjuk) abba a könyvtárba. A promptodnak most már az alábbiakhoz kell hasonlítania.
~/pset1/ $
Ha nem, menj vissza a lépéseidhez, és nézd meg, hogy meg tudod-e határozni, hol rontottad el.
Now execute
mkdir ~/pset1/hello
to create a new directory called hello
inside of your pset1
directory. Ezután hajtsd végre
cd ~/pset1/hello
a saját magadat ebbe a könyvtárba.
Megírassuk veled az első programodat? A Fájl menüből kattints az Új fájl menüpontra, és mentsd el (a Fájl menü Mentés opcióján keresztül) hello.c
a ~/pset1/hello
könyvtáradon belül. Folytasd az első programod megírását úgy, hogy pontosan ezeket a sorokat gépeled be a fájlba:
#include <stdio.h>int main(void){ printf("hello, world\n");}
Figyelj arra, hogy a CS50 IDE “szintaxis-kiemelést” (azaz színt) ad hozzá gépelés közben, bár a CS50 IDE színválasztása eltérhet ennek a feladatsornak a színválasztásától. Ezek a színek valójában nincsenek elmentve magába a fájlba; csak a CS50 IDE adja hozzá őket, hogy bizonyos szintaxisokat kiemeljen. Ha nem mentette volna eleve hello.c
néven a fájlt, a CS50 IDE nem tudná (a fájlnév kiterjesztése alapján), hogy C kódot ír, és ebben az esetben ezek a színek hiányoznának.
Fájlok listázása
A következő lépésben a terminálablakban, közvetlenül a prompt (~/pset1/hello/ $
) jobb oldalán hajtsa végre
ls
Most csak a hello.c
? Ez azért van, mert épp most sorolta fel a hello
mappában lévő fájlokat. Konkrétan egy ls
nevű parancsot hajtottál végre (azaz futtattál), ami a “listázás” rövidítése. (Ez egy olyan gyakran használt parancs, hogy a szerzői a billentyűleütések megtakarítása érdekében csak ls
-nak nevezték el). Van értelme?
Programok fordítása
Most, mielőtt a hello.c
programot végre tudnánk hajtani, emlékezzünk arra, hogy egy fordítóprogrammal (pl. clang
) le kell fordítanunk, lefordítva azt a forráskódból gépi kódra (azaz nullákra és egyesekre). Futtassuk ki az alábbi parancsot, hogy ezt megtegyük:
clang hello.c
Aztán ezt ismét futtassuk ki:
ls
Ezúttal már nem csak a hello.c
, hanem a a.out
is fel kell, hogy kerüljön a listára? (Grafikusan ugyanezt láthatod, ha újra rákattintasz arra a mappa ikonra.) Ez azért van, mert a clang
a hello.c
-ben lévő forráskódot lefordította a a.out
-ban lévő gépi kódra, ami történetesen az “assembler output”-ot jelenti, de erről majd máskor.
Most futtassuk a programot az alábbival.
./a.out
Hello, világ, valóban!
Programok elnevezése
Nocsak, a a.out
nem a legfelhasználóbarátabb neve egy programnak. Fordítsuk le újra a hello.c
programot, ezúttal a gépi kódot egy olyan fájlba mentve, aminek a neve találóbb, hello
. Végezzük el az alábbiakat.
clang -o hello hello.c
Vigyázzunk, hogy ne hagyjuk figyelmen kívül a benne lévő szóközöket! Ezután hajtsd végre újra ezt:
ls
Most már nem csak hello.c
(és a.out
az előbbiekből), hanem hello
is fel kellene tüntetned? Ez azért van, mert a -o
egy parancssori argumentum, néha flag vagy switch néven is ismert, amely azt mondja a clang
-nek, hogy adjon ki (ezért a o
) egy hello
nevű fájlt. Végezzük el az alábbi parancsot, hogy kipróbáljuk az újonnan elnevezett programot.
./hello
Hello there again!
Making Things Easier
Memlékezzünk arra, hogy automatizálhatjuk a clang
végrehajtásának folyamatát, hagyva, hogy make
kitalálja helyettünk, hogyan tegye ezt, ezzel megspórolva néhány billentyűleütést. Végezzük el az alábbiakat, hogy még egyszer utoljára lefordítsuk ezt a programot.
make hello
Láthatod, hogy a make
még több parancssori argumentummal hajtja végre helyetted a clang
-et? Ezekről is majd máskor!
Futtassuk most magát a programot még egyszer utoljára, az alábbit végrehajtva.
./hello
Phew!
A felhasználói bemenet fogadása
Elég, ha annyit mondunk, hogy mindegy, hogyan fordítjuk vagy hajtjuk végre ezt a programot, mindig csak hello, world
-t ír ki. Személyesítsük egy kicsit, ahogy az órán is tettük.
Módosítsuk ezt a programot úgy, hogy először kérdezze meg a felhasználótól a nevét, majd kiírja hello, so-and-so
, ahol so-and-so
a tényleges neve.
Az előzőekhez hasonlóan mindenképpen fordítsd le a programodat:
make hello
És mindenképpen futtasd le a programodat, tesztelve azt néhányszor különböző bemenetekkel, a következőkkel:
./hello
Séta
Súgók
Nem emlékszel, hogyan kérdezd meg a felhasználót a nevére?
Emlékezzen arra, hogy a get_string
-t a következőképpen használhatja, a visszatérési értékét egy name
nevű, string
típusú változóban tárolva.
string name = get_string("What is your name?\n");
Nem emlékszik arra, hogyan kell egy karakterláncot formázni?
Nem emlékszik arra, hogyan kell összekapcsolni (ill, konkatenálni) a felhasználó nevét egy üdvözlettel? Emlékezzen arra, hogy a printf
nem csak nyomtatásra, hanem egy karakterlánc formázására is használható (ezért a f
a printf
-ben), a la az alábbi, ahol a name
egy string
.
printf("hello, %s\n", name);
Nem deklarált azonosító használata?
Az alábbi, esetleg más hibák láttán?
error: use of undeclared identifier 'string'; did you mean 'stdin'?
Emlékezzünk arra, hogy a get_string
használatához a cs50.h
(amelyben a get_string
deklarálva van) állomány tetején kell szerepelnie, mint például:
#include <cs50.h>
Hogyan teszteljük a kódunkat
Futtassuk az alábbiakat, hogy értékeljük a kódunk helyességét a check50
használatával. De mindenképpen fordítsd le és teszteld le te is!
check50 cs50/problems/2020/x/hello
Futtasd az alábbiakat a kódod stílusának értékeléséhez a style50
használatával.
style50 hello.c
How to Submit
Futtasd az alábbiakat, jelentkezz be a GitHub felhasználóneveddel és jelszavaddal, amikor erre kérnek. A biztonság kedvéért a jelszó tényleges karakterei helyett csillagokat (*
) fog látni a jelszóban.
submit50 cs50/problems/2020/x/hello