Inizio
CS50 IDE è un “ambiente di sviluppo integrato” basato sul web che ti permette di programmare “nella nuvola”, senza installare alcun software localmente. Infatti, CS50 IDE vi fornisce il vostro proprio “spazio di lavoro” (cioè, lo spazio di archiviazione) in cui è possibile salvare i propri file e cartelle (aka directory).
Logging In
Andate su ide.cs50.io e cliccate “Sign in with GitHub” per accedere al vostro CS50 IDE. Una volta caricato il vostro IDE, dovreste vedere che (per default) è diviso in tre parti. Verso la parte superiore dell’IDE CS50 è il vostro “editor di testo”, dove scriverete tutti i vostri programmi. Verso il basso c’è una “finestra terminale” (azzurra, di default), un’interfaccia a riga di comando (CLI) che vi permette di esplorare i file e le directory del vostro spazio di lavoro, compilare codice, eseguire programmi e anche installare nuovo software. E sulla sinistra c’è il tuo “file browser”, che ti mostra tutti i file e le cartelle attualmente nel tuo IDE.
Inizia cliccando all’interno della tua finestra di terminale. Dovresti trovare che il suo “prompt” assomiglia a quello qui sotto.
~/ $
Clicca all’interno della finestra del terminale e poi digita
mkdir ~/pset1/
seguito da Invio per creare una directory (cioè una cartella) chiamata pset1
nella tua home directory. Fate attenzione a non trascurare lo spazio tra mkdir
e ~/pset1
o qualsiasi altro carattere! Tieni presente che ~
denota la tua home directory e ~/pset1
denota una directory chiamata pset1
all’interno di ~
.
Da qui in poi, eseguire (cioè, eseguire) un comando significa digitarlo in una finestra del terminale e poi premere Invio. I comandi sono “case-sensitive”, quindi assicurati di non digitare in maiuscolo quando intendi minuscolo o viceversa.
Ora esegui
cd ~/pset1/
per muoverti in (cioè, aprire) quella directory. Il tuo prompt dovrebbe ora assomigliare al seguente.
~/pset1/ $
Se no, torna sui tuoi passi e vedi se puoi determinare dove hai sbagliato.
Ora esegui
mkdir ~/pset1/hello
per creare una nuova directory chiamata hello
dentro la tua directory pset1
. Poi esegui
cd ~/pset1/hello
per spostarti in quella directory.
Ti facciamo scrivere il tuo primo programma? Dal menu File, clicca su New File, e salvalo (come tramite l’opzione Save nel menu File) come hello.c
all’interno della tua directory ~/pset1/hello
. Procedete a scrivere il vostro primo programma digitando esattamente queste righe nel file:
#include <stdio.h>int main(void){ printf("hello, world\n");}
Nota come CS50 IDE aggiunge “l’evidenziazione della sintassi” (cioè il colore) mentre digitate, anche se la scelta dei colori di CS50 IDE potrebbe essere diversa da quella di questo set di problemi. Questi colori non sono effettivamente salvati all’interno del file stesso; sono solo aggiunti da CS50 IDE per far risaltare certa sintassi. Se non avessi salvato il file come hello.c
fin dall’inizio, CS50 IDE non saprebbe (per l’estensione del nome del file) che stai scrivendo codice C, nel qual caso quei colori sarebbero assenti.
Listing Files
Poi, nella tua finestra del terminale, immediatamente a destra del prompt (~/pset1/hello/ $
), esegui
ls
Vedi solo hello.c
? Questo perché hai appena elencato i file nella tua cartella hello
. In particolare, hai eseguito un comando chiamato ls
, che è l’abbreviazione di “lista”. (È un comando usato così frequentemente che i suoi autori l’hanno chiamato solo ls
per risparmiare le sequenze di tasti). Ha senso?
Compilare programmi
Ora, prima di poter eseguire il programma hello.c
, ricordiamo che dobbiamo compilarlo con un compilatore (ad esempio, clang
), traducendolo dal codice sorgente in codice macchina (cioè, zero e uno). Eseguite il comando qui sotto per fare proprio questo:
clang hello.c
E poi eseguite ancora questo:
ls
Questa volta, dovreste vedere non solo hello.c
ma anche a.out
elencati? (Questo perché clang
ha tradotto il codice sorgente in hello.c
in codice macchina in a.out
, che si dà il caso stia per “output assembler”, ma di questo parleremo un’altra volta.
Esegui ora il programma eseguendo il seguente.
./a.out
Ciao, mondo, davvero!
Nominare i programmi
Ora, a.out
non è il nome più facile per un programma. Compiliamo di nuovo hello.c
, questa volta salvando il codice macchina in un file chiamato, più appropriatamente, hello
. Eseguite il seguente.
clang -o hello hello.c
Fate attenzione a non trascurare nessuno di quegli spazi! Poi esegui di nuovo questo:
ls
Ora dovresti vedere non solo hello.c
(e a.out
di prima) ma anche hello
elencati? Questo perché -o
è un argomento della linea di comando, a volte conosciuto come una bandiera o uno switch, che dice a clang
di emettere (da cui il o
) un file chiamato hello
. Eseguite il seguente per provare il programma appena nominato.
./hello
Ciao di nuovo!
Rendere le cose più facili
Ricordate che possiamo automatizzare il processo di esecuzione di clang
, lasciando che make
capisca come farlo per noi, risparmiandoci così alcune battute. Eseguite il seguente per compilare questo programma un’ultima volta.
make hello
Dovreste vedere che make
esegue clang
con ancora più argomenti da linea di comando per voi? Anche su quelli, un’altra volta!
Esegui ora il programma stesso un’ultima volta eseguendo il seguente.
./hello
Phew!
Ricevere l’input dell’utente
Basta dire che non importa come tu compili o esegua questo programma, esso stampa sempre e solo hello, world
. Personalizziamolo un po’, proprio come abbiamo fatto in classe.
Modifichiamo questo programma in modo che prima chieda all’utente il suo nome e poi stampi hello, so-and-so
, dove so-and-so
è il suo vero nome.
Come prima, assicuratevi di compilare il vostro programma con:
make hello
E assicuratevi di eseguire il vostro programma, testandolo alcune volte con input diversi, con:
./hello
Walkthrough
Hints
Non ricordi come chiedere all’utente il suo nome?
Ricorda che puoi usare get_string
come segue, memorizzando il suo valore di ritorno in una variabile chiamata name
di tipo string
.
string name = get_string("What is your name?\n");
Non ricordi come formattare una stringa? concatenare) il nome dell’utente con un saluto? Ricordate che potete usare printf
non solo per stampare ma per formattare una stringa (da qui, il f
in printf
), come sotto, dove name
è un string
.
printf("hello, %s\n", name);
Uso di identificatore non dichiarato?
printf("hello, %s\n", name);
Vedendo il sotto, forse in cima ad altri errori?
error: use of undeclared identifier 'string'; did you mean 'stdin'?
Ricorda che, per usare get_string
, devi includere cs50.h
(in cui è dichiarato get_string
) in cima a un file, come con:
#include <cs50.h>
Come testare il tuo codice
Esegui il seguente per valutare la correttezza del tuo codice usando check50
. Ma assicurati di compilare e testare anche tu!
check50 cs50/problems/2020/x/hello
Esegui il seguente per valutare lo stile del tuo codice usando style50
.
style50 hello.c
Come inviare
Esegui il seguente, accedendo con il tuo username e password di GitHub quando richiesto. Per sicurezza, vedrai degli asterischi (*
) al posto dei caratteri reali della tua password.
submit50 cs50/problems/2020/x/hello