Aan de slag
CS50 IDE is een web-gebaseerde “geïntegreerde ontwikkel omgeving” die je in staat stelt om “in the cloud” te programmeren, zonder software lokaal te installeren. CS50 IDE biedt je je eigen “werkruimte” (opslagruimte) waarin je je eigen bestanden en mappen (ook wel directories genoemd) kunt opslaan.
Inloggen
Ga naar ide.cs50.io en klik op “Aanmelden met GitHub” om toegang te krijgen tot je CS50 IDE. Zodra je IDE geladen is, zou je moeten zien dat het (standaard) verdeeld is in drie delen. Aan de bovenkant van CS50 IDE is je “tekst editor”, waar je al je programma’s zult schrijven. Onderin is een “terminal venster” (standaard lichtblauw), een command-line interface (CLI) waarmee je de bestanden en mappen van je werkruimte kunt verkennen, code kunt compileren, programma’s kunt draaien, en zelfs nieuwe software kunt installeren. En aan de linkerkant is uw “file browser”, die u alle bestanden en mappen laat zien die momenteel in uw IDE staan.
Begin met klikken in uw terminal venster. U zult merken dat de “prompt” op het onderstaande lijkt.
~/ $
Klik in dat terminal venster en typ dan
mkdir ~/pset1/
gevolgd door Enter om een directory (d.w.z., map) genaamd pset1
in uw home directory te maken. Let op dat u de spatie tussen mkdir
en ~/pset1
of een ander teken niet over het hoofd ziet! Onthoud dat ~
uw home directory aangeeft en ~/pset1
een directory genaamd pset1
binnen ~
.
Hierbij betekent het uitvoeren (d.w.z. uitvoeren) van een commando dat u het in een terminal venster typt en dan op Enter drukt. Commando’s zijn “hoofdlettergevoelig”, dus typ niet in hoofdletters als je kleine letters bedoelt of andersom.
Nu uitvoeren
cd ~/pset1/
om jezelf in die directory te verplaatsen (d.w.z., te openen). Uw prompt zou er nu uit moeten zien zoals hieronder.
~/pset1/ $
In het andere geval, volg uw stappen en kijk of u kunt bepalen waar u de fout in bent gegaan.
Uitvoeren
mkdir ~/pset1/hello
om een nieuwe directory genaamd hello
aan te maken in uw pset1
directory. Voer vervolgens
cd ~/pset1/hello
uit om uzelf in die directory te verplaatsen.
Zullen we u uw eerste programma laten schrijven? Klik in het menu Bestand op Nieuw bestand, en sla het op (zoals via de optie Opslaan in het menu Bestand) als hello.c
in uw directory ~/pset1/hello
. Schrijf je eerste programma door precies deze regels in het bestand te typen:
#include <stdio.h>int main(void){ printf("hello, world\n");}
Merk op hoe CS50 IDE “syntax highlighting” (d.w.z., kleur) toevoegt terwijl je typt, hoewel CS50 IDE’s keuze van kleuren kan verschillen van die van deze probleem set. Deze kleuren zijn niet opgeslagen in het bestand zelf; ze zijn alleen toegevoegd door CS50 IDE om bepaalde syntax te laten opvallen. Als je het bestand niet vanaf het begin als hello.c
had opgeslagen, zou CS50 IDE niet weten (door de extensie van de bestandsnaam) dat je C code aan het schrijven bent, in welk geval de kleuren niet aanwezig zouden zijn.
Listing Files
Volgende, in je terminal venster, direct rechts van de prompt (~/pset1/hello/ $
), voer je uit
ls
Je zou alleen hello.c
moeten zien? Dat komt omdat u zojuist de bestanden in uw hello
map heeft opgesomd. In het bijzonder hebt u een commando uitgevoerd (d.w.z. uitgevoerd) met de naam ls
, wat steno is voor “lijst”. (Het is zo’n vaak gebruikt commando dat de auteurs het gewoon ls
noemden om toetsaanslagen te besparen). Snap je?
Compileren van programma’s
Nou, voordat we het hello.c
programma kunnen uitvoeren, herinneren we ons dat we het moeten compileren met een compiler (b.v. clang
), die het vertaalt van broncode naar machinecode (d.w.z., nullen en enen). Voer het onderstaande commando uit om dat te doen:
clang hello.c
En voer deze dan nog een keer uit:
ls
Deze keer zou u niet alleen hello.c
maar ook a.out
in de lijst moeten zien staan? (U kunt hetzelfde grafisch zien als u nogmaals op dat map-icoontje klikt.) Dat komt omdat clang
de broncode in hello.c
heeft vertaald naar machinecode in a.out
, wat toevallig staat voor “assembler output,” maar daarover een andere keer meer.
Nu het programma uitvoeren door het onderstaande uit te voeren.
./a.out
Hallo, wereld, inderdaad!
Programma’s benoemen
Nou, a.out
is niet de meest gebruikersvriendelijke naam voor een programma. Laten we hello.c
opnieuw compileren, deze keer de machinecode opslaan in een bestand met de toepasselijke naam hello
. Voer de onderstaande uit.
clang -o hello hello.c
Zorg ervoor dat u geen van die spaties daarin over het hoofd ziet! Voer deze dan nog een keer uit:
ls
U zou nu niet alleen hello.c
(en a.out
van daarnet) maar ook hello
moeten zien staan? Dat komt omdat -o
een command-line argument is, soms bekend als een vlag of een switch, die clang
vertelt om een bestand genaamd hello
uit te voeren (vandaar de o
). Voer het onderstaande uit om het nieuw genoemde programma uit te proberen.
./hello
Hallo daar!
Dingen makkelijker maken
Houd in gedachten dat we het proces van het uitvoeren van clang
kunnen automatiseren, door make
voor ons uit te laten zoeken hoe dat moet, waardoor we ons een aantal toetsaanslagen besparen. Voer het onderstaande uit om dit programma nog een laatste keer te compileren.
make hello
Je zou moeten zien dat make
clang
uitvoert met nog meer command-line argumenten voor jou? Daarover een andere keer meer!
Doe nu het programma zelf nog een laatste keer door het onderstaande uit te voeren.
./hello
Phew!
Getting User Input
Hoe je dit programma ook compileert of uitvoert, het drukt altijd alleen maar hello, world
af. Laten we het een beetje personaliseren, net zoals we in de les hebben gedaan.
Wijzig dit programma zodanig dat het de gebruiker eerst om zijn naam vraagt en dan hello, so-and-so
afdrukt, waarbij so-and-so
zijn eigenlijke naam is.
Zorg ervoor dat u uw programma compileert met:
make hello
En zorg ervoor dat u uw programma uitvoert, door het een paar keer te testen met verschillende inputs, met:
./hello
Walkthrough
Hints
Weet u niet meer hoe u de gebruiker om zijn naam moet vragen?
Houd in gedachten dat u get_string
als volgt kunt gebruiken, waarbij u de retourwaarde opslaat in een variabele genaamd name
van het type string
.
string name = get_string("What is your name?\n");
Weet u niet meer hoe u een string moet formatteren?
Weet u niet meer hoe u de gebruikersnamen moet samenvoegen (d.w.z., aaneenrijgen) van de naam van de gebruiker met een begroeting? Herinnert u zich dat u printf
niet alleen kunt gebruiken om af te drukken, maar ook om een string op te maken (vandaar de f
in printf
), a la het onderstaande, waarin name
een string
is.
printf("hello, %s\n", name);
Gebruik van undeclared identifier?
Zie u het onderstaande, misschien boven op andere fouten?
error: use of undeclared identifier 'string'; did you mean 'stdin'?
Om get_string
te gebruiken, moet u cs50.h
(waarin get_string
wordt gedeclareerd) boven op een bestand zetten, zoals in:
#include <cs50.h>
Hoe test u uw code
Uitvoeren van het onderstaande om de juistheid van uw code met check50
te evalueren. Maar zorg ervoor dat u de code ook compileert en test!
check50 cs50/problems/2020/x/hello
Uitvoeren van het onderstaande om de stijl van uw code te evalueren met behulp van style50
.
style50 hello.c
Hoe te verzenden
Uitvoeren van het onderstaande, inloggen met uw GitHub gebruikersnaam en wachtwoord wanneer daarom wordt gevraagd. Voor de veiligheid ziet u asterisken (*
) in plaats van de echte tekens in uw wachtwoord.
submit50 cs50/problems/2020/x/hello