Kom i gang
CS50 IDE er et webbaseret “integreret udviklingsmiljø”, der giver dig mulighed for at programmere “i skyen” uden at installere nogen software lokalt. CS50 IDE giver dig nemlig dit helt eget “arbejdsområde” (dvs. lagerplads), hvor du kan gemme dine egne filer og mapper (også kaldet mapper).
Logge ind
Gå til ide.cs50.io, og klik på “Log ind med GitHub” for at få adgang til dit CS50 IDE. Når dit IDE indlæses, bør du se, at det (som standard) er opdelt i tre dele. Mod toppen af CS50 IDE er din “teksteditor”, hvor du vil skrive alle dine programmer. I bunden af er der et “terminalvindue” (lyseblåt som standard), en kommandolinje-grænseflade (CLI), som giver dig mulighed for at udforske dit arbejdsrums filer og mapper, kompilere kode, køre programmer og endda installere ny software. Og til venstre er din “filbrowser”, som viser dig alle de filer og mapper, der i øjeblikket findes i dit IDE.
Start ved at klikke inde i dit terminalvindue. Du bør opdage, at dets “prompt” ligner nedenstående.
~/ $
Klik inde i dette terminalvindue, og skriv derefter
mkdir ~/pset1/
efterfulgt af Enter for at oprette en mappe (dvs. en mappe) kaldet pset1
i din hjemmemappe. Pas på ikke at overse mellemrummet mellem mkdir
og ~/pset1
eller noget andet tegn for den sags skyld! Husk, at ~
betegner din hjemmemappe og ~/pset1
betegner en mappe kaldet pset1
i ~
.
Herfra betyder det at udføre (dvs. køre) en kommando at skrive den i et terminalvindue og derefter trykke på Enter. Kommandoer er “case-sensitive”, så sørg for ikke at skrive med store bogstaver, når du mener små bogstaver eller omvendt.
Udfør nu
cd ~/pset1/
for at flytte dig ind i (dvs. åbne) den pågældende mappe. Din prompt bør nu ligne nedenstående.
~/pset1/ $
Hvis ikke, så gå tilbage til dine skridt og se, om du kan finde ud af, hvor du gik galt.
Udfør nu
mkdir ~/pset1/hello
for at oprette en ny mappe kaldet hello
inde i din pset1
-mappe. Derefter skal du udføre
cd ~/pset1/hello
for at flytte dig selv ind i denne mappe.
Skal vi få dig til at skrive dit første program? I menuen Filer skal du klikke på Ny fil og gemme det (som via indstillingen Gem i menuen Filer) som hello.c
inde i din ~/pset1/hello
-mappe. Fortsæt med at skrive dit første program ved at skrive præcis disse linjer ind i filen:
#include <stdio.h>int main(void){ printf("hello, world\n");}
Bemærk, hvordan CS50 IDE tilføjer “syntaksmarkering” (dvs. farve), mens du skriver, selv om CS50 IDE’s valg af farver kan afvige fra dette problemsæt. Disse farver er faktisk ikke gemt i selve filen; de er blot tilføjet af CS50 IDE for at få visse syntakser til at skille sig ud. Hvis du ikke havde gemt filen som hello.c
fra starten, ville CS50 IDE ikke vide (via filnavnets udvidelse), at du skriver C-kode, og i så fald ville disse farver ikke være til stede.
Liste over filer
Dernæst skal du i dit terminalvindue, umiddelbart til højre for prompten (~/pset1/hello/ $
), udføre
ls
Du bør kun se hello.c
? Det er fordi du netop har listet filerne i din hello
-mappe. Du har især udført (dvs. kørt) en kommando kaldet ls
, som er en forkortelse for “list”. (Det er en så hyppigt anvendt kommando, at dens forfattere kaldte den bare ls
for at spare tastetryk). Giver det mening?
Kompilering af programmer
Nu skal vi, før vi kan udføre hello.c
-programmet, huske, at vi skal kompilere det med en compiler (f.eks. clang
), der oversætter det fra kildekode til maskinkode (dvs. nuller og ettaller). Udfør nedenstående kommando for at gøre netop dette:
clang hello.c
Og udfør derefter denne igen:
ls
Denne gang skulle du se, at ikke kun hello.c
men også a.out
er opført? (Du kan se det samme grafisk, hvis du klikker på mappeikonet igen.) Det er fordi clang
har oversat kildekoden i hello.c
til maskinkode i a.out
, som tilfældigvis står for “assembler output”, men mere om det en anden gang.
Kør nu programmet ved at udføre nedenstående.
./a.out
Hej, verden, sandelig!
Navne programmer
Nu er a.out
ikke det mest brugervenlige navn for et program. Lad os kompilere hello.c
igen, men denne gang gemmer vi maskinkoden i en fil med det mere passende navn hello
. Udfør nedenstående.
clang -o hello hello.c
Hold øje med, at du ikke overser nogen af de mellemrum deri! Udfør derefter denne igen:
ls
Du burde nu ikke kun se hello.c
(og a.out
fra før), men også hello
opført? Det skyldes, at -o
er et kommandolinjeargument, nogle gange kendt som et flag eller en switch, der fortæller clang
, at clang
skal udgive (deraf o
) en fil kaldet hello
. Udfør nedenstående for at afprøve det nyligt navngivne program.
./hello
Hej der igen!
Men gør tingene nemmere
Husk, at vi kan automatisere processen med at udføre clang
og lade make
finde ud af at gøre det for os og dermed spare os nogle tastetryk. Udfør nedenstående for at kompilere dette program en sidste gang.
make hello
Du skulle kunne se, at make
udfører clang
med endnu flere kommandolinjeargumenter for dig? Mere om dem også en anden gang!
Kør nu selve programmet en sidste gang ved at udføre nedenstående.
./hello
Phew!
Optagelse af brugerinput
Det er nok at sige, at uanset hvordan du kompilerer eller udfører dette program, udskriver det altid kun hello, world
. Lad os personliggøre det lidt, ligesom vi gjorde i klassen.
Modificer dette program på en sådan måde, at det først spørger brugeren om hans navn og derefter udskriver hello, so-and-so
, hvor so-and-so
er hans faktiske navn.
Som før skal du sørge for at kompilere dit program med:
make hello
Og sørg for at udføre dit program og teste det et par gange med forskellige input med:
make hello
Og sørg for at udføre dit program og teste det et par gange med forskellige input med:
./hello
Gennemgang
Hinvisninger
Kan du ikke huske, hvordan man beder brugeren om sit navn?
Husk, at du kan bruge get_string
som følger, idet du gemmer dens returværdi i en variabel kaldet name
af typen string
.
string name = get_string("What is your name?\n");
Kan du ikke huske, hvordan man formaterer en streng?
Kan du ikke huske, hvordan man sammenføjer (dvs, sammenkædning) af brugerens navn med en hilsen? Husk, at du kan bruge printf
ikke kun til at udskrive, men også til at formatere en streng (derfor f
i printf
), a la nedenstående, hvor name
er en string
.
printf("hello, %s\n", name);
Brug af ikke-deklareret identifikator?
Så du nedenstående, måske oven på andre fejl?
error: use of undeclared identifier 'string'; did you mean 'stdin'?
Husk, at for at bruge get_string
skal du inkludere cs50.h
(hvori get_string
er erklæret) på toppen af en fil, som med:
#include <cs50.h>
Sådan tester du din kode
Udfør nedenstående for at evaluere korrektheden af din kode, der bruger check50
. Men sørg også selv for at kompilere og teste den!
check50 cs50/problems/2020/x/hello
Udfør nedenstående for at evaluere stilen i din kode ved hjælp af style50
.
style50 hello.c
Sådan indsender du
Udfør nedenstående og log ind med dit GitHub-brugernavn og din adgangskode, når du bliver bedt om det. Af sikkerhedshensyn vises stjernetegn (*
) i stedet for de faktiske tegn i din adgangskode.
submit50 cs50/problems/2020/x/hello