Det här är CS50x

Kom igång

CS50 IDE är en webbaserad ”integrerad utvecklingsmiljö” som gör att du kan programmera ”i molnet” utan att installera någon programvara lokalt. CS50 IDE ger dig faktiskt din egen ”arbetsyta” (dvs. lagringsutrymme) där du kan spara dina egna filer och mappar (även kallade kataloger).

Inloggning

Växla till ide.cs50.io och klicka på ”Sign in with GitHub” för att få tillgång till din CS50 IDE. När ditt IDE laddas bör du se att det (som standard) är uppdelat i tre delar. Längst upp i CS50 IDE finns din ”textredigerare”, där du skriver alla dina program. Längst ner finns ett ”terminalfönster” (ljusblått som standard), ett kommandoradsgränssnitt (CLI) som gör att du kan utforska arbetsytans filer och kataloger, kompilera kod, köra program och till och med installera ny programvara. Och till vänster finns din ”filblädderare”, som visar alla filer och mappar som för närvarande finns i ditt IDE.

Start genom att klicka inne i ditt terminalfönster. Du bör se att dess ”prompt” liknar den nedan.

~/ $

Klicka inne i terminalfönstret och skriv sedan

mkdir ~/pset1/

följt av Enter för att skapa en katalog (dvs. mapp) som heter pset1 i din hemkatalog. Se till att du inte glömmer bort mellanslaget mellan mkdir och ~/pset1 eller något annat tecken för den delen! Kom ihåg att ~ betecknar din hemkatalog och ~/pset1 betecknar en katalog som heter pset1 inom ~.

Här och nu innebär att utföra (dvs. köra) ett kommando att skriva in det i ett terminalfönster och sedan trycka på Enter. Kommandon är ”skiftlägeskänsliga”, så se till att inte skriva med versaler när du menar små bokstäver eller tvärtom.

Exekvera

cd ~/pset1/

för att förflytta dig in i (d.v.s. öppna) den katalogen. Din prompt bör nu likna nedanstående.

~/pset1/ $

Om inte, gå tillbaka till dina steg och se om du kan avgöra var du gjorde fel.

Exekvera nu

mkdir ~/pset1/hello

för att skapa en ny katalog som heter hello inuti din katalog pset1. Exekvera sedan

cd ~/pset1/hello

för att flytta dig själv till den katalogen.

Ska vi låta dig skriva ditt första program? I menyn Arkiv klickar du på Ny fil och sparar den (via alternativet Spara i menyn Arkiv) som hello.c i din katalog ~/pset1/hello. Fortsätt att skriva ditt första program genom att skriva exakt dessa rader i filen:

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

Bemärk hur CS50 IDE lägger till ”syntaxmarkering” (dvs. färg) när du skriver, även om CS50 IDE:s val av färger kan skilja sig från den här problemuppsättningen. Dessa färger sparas faktiskt inte i själva filen, de läggs bara till av CS50 IDE för att få viss syntax att framträda. Om du inte hade sparat filen som hello.c från början skulle CS50 IDE inte veta (genom filnamnets förlängning) att du skriver C-kod, i vilket fall dessa färger skulle saknas.

Lista över filer

Nästan, i ditt terminalfönster, omedelbart till höger om prompten (~/pset1/hello/ $), kör

ls

Du borde bara se hello.c? Det beror på att du just har listat filerna i mappen hello. Du utförde (dvs. körde) ett kommando som heter ls, vilket är en förkortning för ”list”. (Det är ett så ofta använt kommando att dess författare kallade det bara ls för att spara tangenttryckningar.) Är det begripligt?

Kompilering av program

Nu, innan vi kan exekvera hello.c-programmet, minns vi att vi måste kompilera det med en kompilator (t.ex. clang), som översätter det från källkod till maskinkod (dvs. nollor och ettor). Utför kommandot nedan för att göra just det:

clang hello.c

Och utför sedan det här kommandot igen:

ls

Den här gången borde du se att inte bara hello.c utan även a.out listas? (Du kan se samma sak grafiskt om du klickar på mappikonen igen.) Det beror på att clang har översatt källkoden i hello.c till maskinkod i a.out, vilket råkar stå för ”assembler output”, men mer om det en annan gång.

Kör nu programmet genom att köra nedanstående.

./a.out

Hej, världen, sannerligen!

Namngivning av program

Nu är a.out inte det mest användarvänliga namnet för ett program. Låt oss kompilera hello.c igen, den här gången sparar vi maskinkoden i en fil som heter, mer passande nog, hello. Exekvera nedanstående.

clang -o hello hello.c

Se till att inte förbise något av de mellanslag som finns där! Utför sedan denna igen:

ls

Du borde nu se inte bara hello.c (och a.out från tidigare) utan även hello listad? Det beror på att -o är ett kommandoradsargument, ibland kallat flagga eller switch, som säger åt clang att skriva ut (därav o) en fil som heter hello. Exekvera nedanstående för att prova det nyss namngivna programmet.

./hello

Hej där igen!

Förenkla saker och ting

Håll dig i minnet att vi kan automatisera processen med att exekvera clang, genom att låta make räkna ut hur det ska gå till för oss, och på så sätt spara oss några tangenttryckningar. Exekvera nedanstående för att kompilera det här programmet en sista gång.

make hello

Du borde se att make exekverar clang med ännu fler kommandoradsargument åt dig? Mer om dem också, en annan gång!

Exekvera nu själva programmet en sista gång genom att exekvera nedanstående.

./hello

Phew!

Hämtning av användarinmatning

Det räcker med att säga att oavsett hur du kompilerar eller exekverar det här programmet, så skrivs alltid bara hello, world ut. Låt oss anpassa det lite, precis som vi gjorde i klassen.

Modifiera det här programmet på ett sådant sätt att det först frågar användaren efter hans eller hennes namn och sedan skriver ut hello, so-and-so, där so-and-so är hans eller hennes faktiska namn.

Som tidigare, se till att kompilera ditt program med:

make hello

Och se till att exekvera ditt program, testa det några gånger med olika indata, med:

./hello

Guidning

Hänvisningar

Kommer du inte ihåg hur man frågar användaren efter dennes namn?

Håll dig i minnet att du kan använda get_string på följande sätt och lagra dess returvärde i en variabel som heter name av typen string.

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

Kommer du inte ihåg hur man formaterar en sträng?

Kommer du inte ihåg hur man sammanfogar (dvs, sammanfoga) användarens namn med en hälsning? Kom ihåg att du kan använda printf inte bara för att skriva ut utan också för att formatera en sträng (därav f i printf), som nedan, där name är en string.

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

Användning av odeklarerad identifierare?

Som du ser nedan, kanske på andra fel?

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

Håll dig i minnet att för att använda get_string måste du inkludera cs50.h (där get_string deklareras) ovanpå en fil, som med:

#include <cs50.h>

Hur du testar din kod

Utför nedanstående för att utvärdera om din kod är korrekt med check50. Men se till att kompilera och testa den själv också!

check50 cs50/problems/2020/x/hello

Uppför nedanstående för att utvärdera stilen på din kod med hjälp av style50.

style50 hello.c

Hur du skickar in

Uppför nedanstående och logga in med ditt användarnamn och lösenord från GitHub när du blir tillfrågad. För säkerhets skull visas asterisker (*) i stället för de faktiska tecknen i ditt lösenord.

submit50 cs50/problems/2020/x/hello

Lämna en kommentar