Ez a CS50x

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

Szólj hozzá!