Dette er CS50x

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

Skriv en kommentar