2 00:00:00,000 --> 00:00:02,760 >> SPEAKER 1: Scriviamo un programma che richiede all'utente il nome e 3 00:00:02,760 --> 00:00:04,700 case di tre studenti. 4 00:00:04,700 --> 00:00:08,840 Ora, per memorizzare i nomi e le case potremmo utilizzare, cosa, sei variabili. 5 00:00:08,840 --> 00:00:12,260 Tre corde per i nomi, ed un altro tre stringhe per le case, 6 00:00:12,260 --> 00:00:16,560 ma sappiamo già che siamo in grado di ripulire tale codice mediante matrici invece, 7 00:00:16,560 --> 00:00:20,220 ad esempio una matrice di dimensione 3 per l' tre nomi, e un'altra serie di 8 00:00:20,220 --> 00:00:22,110 formato 3 per le case. 9 00:00:22,110 --> 00:00:25,870 Ma si scopre che possiamo pulire questo ancora più in là, e in realtà mantenere quelli 10 00:00:25,870 --> 00:00:30,520 nomi e case insieme, in modo che un il nome dello studente e la sua casa 11 00:00:30,520 --> 00:00:34,940 sono in qualche modo incapsulato, per così parlare, nella stessa variabile. 12 00:00:34,940 --> 00:00:39,095 >> Per fare questo, però, dobbiamo dichiarare il nostro tipo di dati, il nostro proprio tipo in C, 13 00:00:39,095 --> 00:00:42,660 che di C gli autori non hanno necessariamente pensare di anni fa. 14 00:00:42,660 --> 00:00:45,630 Per fare questo possiamo usare la parola chiave typedef, insieme con la 15 00:00:45,630 --> 00:00:47,200 altra parola chiave struct. 16 00:00:47,200 --> 00:00:48,160 Diamo uno sguardo. 17 00:00:48,160 --> 00:00:50,650 All'interno di structs.h, ho già ottenuto avviato da 18 00:00:50,650 --> 00:00:52,560 compresa la biblioteca CS50. 19 00:00:52,560 --> 00:00:57,640 Sto accanto andando a digitare typedef struct, e poi una parentesi graffa. 20 00:00:57,640 --> 00:01:01,370 All'interno della struttura, ho intenzione di specificare che uno studente deve avere una 21 00:01:01,370 --> 00:01:04,960 stringa chiamata nome, e un altro stringa chiamato casa. 22 00:01:04,960 --> 00:01:08,430 Ho intenzione di chiudere la mia parentesi graffe, e specificare che il nome di 23 00:01:08,430 --> 00:01:11,420 questo nuovo tipo di dati deve essere studente. 24 00:01:11,420 --> 00:01:15,550 In altre parole, con questa sintassi ho io ha dichiarato un nuovo tipo di dati del mio 25 00:01:15,550 --> 00:01:19,910 che non esisteva un momento fa, e all'interno di questo tipo di dati sono due dati 26 00:01:19,910 --> 00:01:24,270 campi o membri dati, uno chiamato nome, uno chiamato casa, entrambi 27 00:01:24,270 --> 00:01:25,630 sono di tipo string. 28 00:01:25,630 --> 00:01:27,690 >> Vediamo ora utilizzare questo tipo in un programma attuale. 29 00:01:27,690 --> 00:01:30,210 30 00:01:30,210 --> 00:01:34,090 In structs0.c, ho ottenuto simile Mi iniziato già con una certa 31 00:01:34,090 --> 00:01:36,999 codice standard, e sono ora intenzione di utilizzare questi dati 32 00:01:36,999 --> 00:01:39,100 tipo studente, come segue. 33 00:01:39,100 --> 00:01:42,450 Io prima di andare a dichiarare un matrice di tipo studente, io 34 00:01:42,450 --> 00:01:43,920 chiamare gli studenti matrice - 35 00:01:43,920 --> 00:01:44,630 plurale - 36 00:01:44,630 --> 00:01:49,360 e io specificare che la sua dimensione sia tre, che, avviso, è il valore di 37 00:01:49,360 --> 00:01:50,880 le continue STUDENTI - 38 00:01:50,880 --> 00:01:51,890 in tutte le capitali - 39 00:01:51,890 --> 00:01:54,930 che ho dichiarato qui, prima nel file. 40 00:01:54,930 --> 00:01:58,280 Vediamo ora iterare quei tre studenti, e richiedere all'utente 41 00:01:58,280 --> 00:02:00,050 i loro nomi e le case. 42 00:02:00,050 --> 00:02:05,422 >> per int ottengo 0, i è meno quello costante, i + +. 43 00:02:05,422 --> 00:02:08,600 E ora all'interno del corpo di questo per loop, ho intenzione di stampare qualcosa 44 00:02:08,600 --> 00:02:11,470 come il nome dello studente. 45 00:02:11,470 --> 00:02:14,890 Ho quindi intenzione di ottenere effettivamente che il nome dello studente specificando 46 00:02:14,890 --> 00:02:17,290 studenti staffa I. 47 00:02:17,290 --> 00:02:21,550 In altre parole voglio che lo studente i-esimo nella matrice chiamato gli studenti, ma ora 48 00:02:21,550 --> 00:02:25,340 Voglio arrivare a quel i-esimo studente nome, e per fare questo, ho intenzione di usare 49 00:02:25,340 --> 00:02:30,160 l'. operatore, al fine di ottenere in un specifico all'interno del campo della struct. 50 00:02:30,160 --> 00:02:37,100 Così ho specificare studenti staffa I nome. ottiene il valore di ritorno di GetString (). 51 00:02:37,100 --> 00:02:40,310 Nel frattempo, ho intenzione di stampare qualcosa di simile, dicendo studente 52 00:02:40,310 --> 00:02:45,410 casa, e ora sto andando a specificare che il campo di casa gli studenti i-esimo 53 00:02:45,410 --> 00:02:49,480 deve ottenere il valore di ritorno di un'altra chiamata a GetString (). 54 00:02:49,480 --> 00:02:52,350 >> Ora facciamo qualcosa con questi tre I nomi e le case degli studenti, 55 00:02:52,350 --> 00:02:56,230 qualcosa di semplice come la stampa ciascuno in una frase. 56 00:02:56,230 --> 00:03:07,580 per int ottengo 0, ancora una volta i è inferiore a gli studenti, i + +, printf "% s è in% s. 57 00:03:07,580 --> 00:03:12,600 backslash n ", e ora mi collego i valori di questi due settori, 58 00:03:12,600 --> 00:03:19,055 studenti staffa I. nome, virgola, studenti staffa I. casa, close 59 00:03:19,055 --> 00:03:21,290 parentesi, punto e virgola. 60 00:03:21,290 --> 00:03:23,020 >> Ed ora ho bisogno di fare una cosa di più. 61 00:03:23,020 --> 00:03:26,600 Al fondo di questo file, ho bisogno di liberare la memoria allocata 62 00:03:26,600 --> 00:03:30,290 dietro le quinte da GetSring (), che invita naturalmente malloc, per 63 00:03:30,290 --> 00:03:32,500 allocare memoria per le stringhe l'utente. 64 00:03:32,500 --> 00:03:35,720 Ma questo è semplice. 65 00:03:35,720 --> 00:03:42,610 per int ottengo 0, i è minore studenti, i + +, e all'interno del corpo 66 00:03:42,610 --> 00:03:48,670 questo ciclo for, sto semplicemente andando a fornire gratuitamente agli studenti staffa i nome., 67 00:03:48,670 --> 00:03:52,300 e gli studenti liberi staffa I. casa. 68 00:03:52,300 --> 00:03:55,620 >> Ora, abbiamo chiaramente usato tre cicli for in questo programma, quando in realtà io 69 00:03:55,620 --> 00:03:58,800 potuto appena usato uno, ma questo è solo per amor di dimostrazione, in modo che 70 00:03:58,800 --> 00:04:02,850 possiamo specificare in tre distinti PASSI cosa esattamente stiamo facendo. 71 00:04:02,850 --> 00:04:06,120 Stiamo prima ottenere un nome e una casa per ciascuno degli studenti, siamo quindi 72 00:04:06,120 --> 00:04:08,900 stampare il nome e la casa per ciascuno dei tre studenti, e 73 00:04:08,900 --> 00:04:11,910 allora stiamo andando a liberare la memoria utilizzato da ciascuno degli studenti. 74 00:04:11,910 --> 00:04:15,310 Ma sicuramente potremmo ho combinare questo in un unico grande ciclo for. 75 00:04:15,310 --> 00:04:18,650 >> Vediamo ora salvare, compilare, ed eseguire questo programma. 76 00:04:18,650 --> 00:04:26,850 rendere le strutture. 0 / struct 0, allievo di nome, cerchiamo di fornire Davide, vivrà 77 00:04:26,850 --> 00:04:31,580 in Mather House, il nome dello studente, cerchiamo di dice Lauren, lei vive in Leverett 78 00:04:31,580 --> 00:04:36,590 Casa, il nome dello studente, Rob, che sarà lui vivere in Kirkland House. 79 00:04:36,590 --> 00:04:39,440 E in effetti, David è in Mather, Lauren è in Leverett, 80 00:04:39,440 --> 00:04:40,810 e Rob è in Kirkland. 81 00:04:40,810 --> 00:04:43,425