2 00:00:00,000 --> 00:00:02,760 >> COLUMNA 1: Imos escribir un programa que solicita ao usuario os nomes e 3 00:00:02,760 --> 00:00:04,700 casas de tres alumnos. 4 00:00:04,700 --> 00:00:08,840 Agora, para gardar os nomes e as casas poderíamos usar, o que, seis variables. 5 00:00:08,840 --> 00:00:12,260 Tres cordas para os nomes, e outra tres cordas para as casas, 6 00:00:12,260 --> 00:00:16,560 pero xa sabemos que podemos borrar que o código usando matrices en vez diso, 7 00:00:16,560 --> 00:00:20,220 por exemplo unha matriz de tamaño 3 á tres nomes, e outro conxunto de 8 00:00:20,220 --> 00:00:22,110 tamaño 3 para as casas. 9 00:00:22,110 --> 00:00:25,870 Pero resulta que podemos borrar isto aínda máis lonxe, e realmente manter os 10 00:00:25,870 --> 00:00:30,520 nomes e casas xuntos, de xeito que un nome do alumno e a súa casa 11 00:00:30,520 --> 00:00:34,940 son de algunha maneira encapsulada, por así falar, para a mesma variable. 12 00:00:34,940 --> 00:00:39,095 >> Para iso, con todo, necesitamos declarar o noso propio tipo de datos, o noso propio tipo en C, 13 00:00:39,095 --> 00:00:42,660 que os autores do C non necesariamente creo que de anos. 14 00:00:42,660 --> 00:00:45,630 Para iso, podemos utilizar a palabra chave typedef, xunto co 15 00:00:45,630 --> 00:00:47,200 outra struct contrasinal. 16 00:00:47,200 --> 00:00:48,160 Imos dar un ollo. 17 00:00:48,160 --> 00:00:50,650 Dentro structs.h, eu xa chegado comezou por 18 00:00:50,650 --> 00:00:52,560 incluíndo a biblioteca de CS50. 19 00:00:52,560 --> 00:00:57,640 Estou próximo vai escribir typedef struct, e logo, unha bosquexo. 20 00:00:57,640 --> 00:01:01,370 Dentro da estrutura, vou especifica que un alumno debe ter un 21 00:01:01,370 --> 00:01:04,960 cadea chamada nome, e outro cadea chamada casa. 22 00:01:04,960 --> 00:01:08,430 Vou entón pechar os corchetes, e indicar que o nome 23 00:01:08,430 --> 00:01:11,420 este novo tipo de datos debe ser estudante. 24 00:01:11,420 --> 00:01:15,550 Noutras palabras, a través desta sintaxe teño declarou un novo tipo de meu propio datos 25 00:01:15,550 --> 00:01:19,910 que non existía un momento atrás, e dentro deste tipo de datos son dous datos 26 00:01:19,910 --> 00:01:24,270 campos ou membros de datos, un chamado nome, unha chamada local, ambos dos cales 27 00:01:24,270 --> 00:01:25,630 son do tipo cadea. 28 00:01:25,630 --> 00:01:27,690 >> Imos agora utilizar este tipo nun programa real. 29 00:01:27,690 --> 00:01:30,210 30 00:01:30,210 --> 00:01:34,090 En structs0.c, comece do mesmo xeito eu mesmo xa comezou con algúns 31 00:01:34,090 --> 00:01:36,999 código clichê, e eu estou agora vai utilizar estes datos 32 00:01:36,999 --> 00:01:39,100 tipo estudante, como segue. 33 00:01:39,100 --> 00:01:42,450 Vou primeiro para declarar unha matriz do tipo de estudante, eu vou 34 00:01:42,450 --> 00:01:43,920 chamar os alumnos de matriz - 35 00:01:43,920 --> 00:01:44,630 plural - 36 00:01:44,630 --> 00:01:49,360 e eu vou indicar que o seu tamaño será tres, que noten, é o valor da 37 00:01:49,360 --> 00:01:50,880 as constantes estudantes - 38 00:01:50,880 --> 00:01:51,890 en todas as capitais - 39 00:01:51,890 --> 00:01:54,930 que teña declarado aquí, ao principio do ficheiro. 40 00:01:54,930 --> 00:01:58,280 Imos agora iterado sobre os tres alumnos, e pedir ao usuario 41 00:01:58,280 --> 00:02:00,050 os seus nomes e casas. 42 00:02:00,050 --> 00:02:05,422 >> para int eu recibín 0, i é menos que a constante, i + +. 43 00:02:05,422 --> 00:02:08,600 E agora dentro do corpo deste para loop, eu vou imprimir algo 44 00:02:08,600 --> 00:02:11,470 como o nome do alumno. 45 00:02:11,470 --> 00:02:14,890 Eu estou indo entón para comezar realmente que nome do alumno, especificando 46 00:02:14,890 --> 00:02:17,290 estudantes adaptador externo. 47 00:02:17,290 --> 00:02:21,550 Noutras palabras quero que o alumno i-th na matriz chamou os alumnos, pero agora 48 00:02:21,550 --> 00:02:25,340 Eu quero ir nese i-th alumno nome, e para facelo, eu vou usar 49 00:02:25,340 --> 00:02:30,160 o. operador, a fin de chegar a un dentro do campo específico da estrutura. 50 00:02:30,160 --> 00:02:37,100 Así que especificar os alumnos adaptador externo. Nome recibe o valor de retorno de GetString (). 51 00:02:37,100 --> 00:02:40,310 Mentres tanto, eu estou indo a imprimir algo semellante, dicindo alumno 52 00:02:40,310 --> 00:02:45,410 casa, e agora eu vou especificar que o campo de estudantes casa i-th 53 00:02:45,410 --> 00:02:49,480 que obter o valor de retorno de outra chamada a GetString (). 54 00:02:49,480 --> 00:02:52,350 >> Agora, imos facer algo con estes tres nomes e as casas dos alumnos, 55 00:02:52,350 --> 00:02:56,230 algo simple como impresión cada nunha frase. 56 00:02:56,230 --> 00:03:07,580 para int i se 0, de novo i é inferior a estudantes, i + +, printf "% s está en% s. 57 00:03:07,580 --> 00:03:12,600 barra invertida n ", e agora déixeme chamar os valores destes dous campos, 58 00:03:12,600 --> 00:03:19,055 estudantes adaptador externo. nome, coma, estudantes adaptador externo. casa, preto 59 00:03:19,055 --> 00:03:21,290 paréntese, punto e coma. 60 00:03:21,290 --> 00:03:23,020 >> E agora eu teño que facer unha cousa. 61 00:03:23,020 --> 00:03:26,600 Na parte inferior deste arquivo, eu teño liberar a memoria que foi alocada 62 00:03:26,600 --> 00:03:30,290 nos bastidores por GetSring (), que claro chama malloc, a fin de 63 00:03:30,290 --> 00:03:32,500 asignar memoria para as cordas o usuario escribe. 64 00:03:32,500 --> 00:03:35,720 Pero iso é simple. 65 00:03:35,720 --> 00:03:42,610 para int eu recibín 0, i é inferior a estudantes, i + +, e no interior do corpo de 66 00:03:42,610 --> 00:03:48,670 este lazo for, eu estou indo simplemente para proporcionar gratuitamente aos alumnos soporte i. nome, 67 00:03:48,670 --> 00:03:52,300 e os alumnos libres adaptador externo. casa. 68 00:03:52,300 --> 00:03:55,620 >> Agora, temos claramente utilizadas tres loops neste programa, cando en realidade eu 69 00:03:55,620 --> 00:03:58,800 podería usar só un, pero este é só por mor da manifestación, de xeito que 70 00:03:58,800 --> 00:04:02,850 podemos indicar en tres distintas os pasos que exactamente estamos facendo. 71 00:04:02,850 --> 00:04:06,120 Estamos en primeiro lugar obter un nome e unha casa para cada un dos estudantes, estamos logo 72 00:04:06,120 --> 00:04:08,900 imprimir o nome ea casa para cada un dos tres estudantes, e 73 00:04:08,900 --> 00:04:11,910 entón nós estamos indo para liberar a memoria usado por cada un dos alumnos. 74 00:04:11,910 --> 00:04:15,310 Pero certamente que podería combinar iso nunha maior loop for. 75 00:04:15,310 --> 00:04:18,650 >> Imos agora gardar, compilar e executar este programa. 76 00:04:18,650 --> 00:04:26,850 fan estruturas 0. / structs 0, estudante de nomear, imos ofrecer David, que vai vivir 77 00:04:26,850 --> 00:04:31,580 en Mather House, nome do alumno, imos di Lauren, vai vivir en Leverett 78 00:04:31,580 --> 00:04:36,590 House, nome do alumno, Rob, que vai vivir en Kirkland House. 79 00:04:36,590 --> 00:04:39,440 E, de feito, David está no Mather, Lauren está en Leverett, 80 00:04:39,440 --> 00:04:40,810 e Rob está en Kirkland. 81 00:04:40,810 --> 00:04:43,425