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