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.