>> SPEAKER 1: Scriviamo un programma che richiede all'utente il nome e
case di tre studenti.
Ora, per memorizzare i nomi e le case potremmo utilizzare, cosa, sei variabili.
Tre corde per i nomi, ed un altro tre stringhe per le case,
ma sappiamo già che siamo in grado di ripulire tale codice mediante matrici invece,
ad esempio una matrice di dimensione 3 per l' tre nomi, e un'altra serie di
formato 3 per le case.
Ma si scopre che possiamo pulire questo ancora più in là, e in realtà mantenere quelli
nomi e case insieme, in modo che un il nome dello studente e la sua casa
sono in qualche modo incapsulato, per così parlare, nella stessa variabile.
>> Per fare questo, però, dobbiamo dichiarare il nostro tipo di dati, il nostro proprio tipo in C,
che di C gli autori non hanno necessariamente pensare di anni fa.
Per fare questo possiamo usare la parola chiave typedef, insieme con la
altra parola chiave struct.
Diamo uno sguardo.
All'interno di structs.h, ho già ottenuto avviato da
compresa la biblioteca CS50.
Sto accanto andando a digitare typedef struct, e poi una parentesi graffa.
All'interno della struttura, ho intenzione di specificare che uno studente deve avere una
stringa chiamata nome, e un altro stringa chiamato casa.
Ho intenzione di chiudere la mia parentesi graffe, e specificare che il nome di
questo nuovo tipo di dati deve essere studente.
In altre parole, con questa sintassi ho io ha dichiarato un nuovo tipo di dati del mio
che non esisteva un momento fa, e all'interno di questo tipo di dati sono due dati
campi o membri dati, uno chiamato nome, uno chiamato casa, entrambi
sono di tipo string.
>> Vediamo ora utilizzare questo tipo in un programma attuale.
In structs0.c, ho ottenuto simile Mi iniziato già con una certa
codice standard, e sono ora intenzione di utilizzare questi dati
tipo studente, come segue.
Io prima di andare a dichiarare un matrice di tipo studente, io
chiamare gli studenti matrice -
plurale -
e io specificare che la sua dimensione sia tre, che, avviso, è il valore di
le continue STUDENTI -
in tutte le capitali -
che ho dichiarato qui, prima nel file.
Vediamo ora iterare quei tre studenti, e richiedere all'utente
i loro nomi e le case.
>> per int ottengo 0, i è meno quello costante, i + +.
E ora all'interno del corpo di questo per loop, ho intenzione di stampare qualcosa
come il nome dello studente.
Ho quindi intenzione di ottenere effettivamente che il nome dello studente specificando
studenti staffa I.
In altre parole voglio che lo studente i-esimo nella matrice chiamato gli studenti, ma ora
Voglio arrivare a quel i-esimo studente nome, e per fare questo, ho intenzione di usare
l'. operatore, al fine di ottenere in un specifico all'interno del campo della struct.
Così ho specificare studenti staffa I nome. ottiene il valore di ritorno di GetString ().
Nel frattempo, ho intenzione di stampare qualcosa di simile, dicendo studente
casa, e ora sto andando a specificare che il campo di casa gli studenti i-esimo
deve ottenere il valore di ritorno di un'altra chiamata a GetString ().
>> Ora facciamo qualcosa con questi tre I nomi e le case degli studenti,
qualcosa di semplice come la stampa ciascuno in una frase.
per int ottengo 0, ancora una volta i è inferiore a gli studenti, i + +, printf "% s è in% s.
backslash n ", e ora mi collego i valori di questi due settori,
studenti staffa I. nome, virgola, studenti staffa I. casa, close
parentesi, punto e virgola.
>> Ed ora ho bisogno di fare una cosa di più.
Al fondo di questo file, ho bisogno di liberare la memoria allocata
dietro le quinte da GetSring (), che invita naturalmente malloc, per
allocare memoria per le stringhe l'utente.
Ma questo è semplice.
per int ottengo 0, i è minore studenti, i + +, e all'interno del corpo
questo ciclo for, sto semplicemente andando a fornire gratuitamente agli studenti staffa i nome.,
e gli studenti liberi staffa I. casa.
>> Ora, abbiamo chiaramente usato tre cicli for in questo programma, quando in realtà io
potuto appena usato uno, ma questo è solo per amor di dimostrazione, in modo che
possiamo specificare in tre distinti PASSI cosa esattamente stiamo facendo.
Stiamo prima ottenere un nome e una casa per ciascuno degli studenti, siamo quindi
stampare il nome e la casa per ciascuno dei tre studenti, e
allora stiamo andando a liberare la memoria utilizzato da ciascuno degli studenti.
Ma sicuramente potremmo ho combinare questo in un unico grande ciclo for.
>> Vediamo ora salvare, compilare, ed eseguire questo programma.
rendere le strutture. 0 / struct 0, allievo di nome, cerchiamo di fornire Davide, vivrà
in Mather House, il nome dello studente, cerchiamo di dice Lauren, lei vive in Leverett
Casa, il nome dello studente, Rob, che sarà lui vivere in Kirkland House.
E in effetti, David è in Mather, Lauren è in Leverett,
e Rob è in Kirkland.