2 00:00:00,000 --> 00:00:02,760 >> COLUNA 1: Vamos escrever um programa que solicita ao usuário os nomes e 3 00:00:02,760 --> 00:00:04,700 casas de três alunos. 4 00:00:04,700 --> 00:00:08,840 Agora, para armazenar os nomes e as casas nós poderíamos usar, o que, seis variáveis. 5 00:00:08,840 --> 00:00:12,260 Três cordas para os nomes, e outra três cordas para as casas, 6 00:00:12,260 --> 00:00:16,560 mas já sabemos que podemos limpar que o código usando matrizes em vez disso, 7 00:00:16,560 --> 00:00:20,220 por exemplo uma matriz de tamanho 3 para a três nomes, e um outro conjunto de 8 00:00:20,220 --> 00:00:22,110 tamanho 3 para as casas. 9 00:00:22,110 --> 00:00:25,870 Mas acontece que nós podemos limpar isso ainda mais longe, e realmente manter os 10 00:00:25,870 --> 00:00:30,520 nomes e casas em conjunto, de modo que um nome do aluno e sua casa 11 00:00:30,520 --> 00:00:34,940 são de alguma forma encapsulada, por assim falar, para a mesma variável. 12 00:00:34,940 --> 00:00:39,095 >> Para fazer isso, porém, precisamos de declarar o nosso próprio tipo de dados, nosso próprio tipo em C, 13 00:00:39,095 --> 00:00:42,660 que os autores do C não necessariamente acho que de anos atrás. 14 00:00:42,660 --> 00:00:45,630 Para fazer isso, podemos usar a palavra-chave typedef, juntamente com o 15 00:00:45,630 --> 00:00:47,200 outra struct palavra-chave. 16 00:00:47,200 --> 00:00:48,160 Vamos dar uma olhada. 17 00:00:48,160 --> 00:00:50,650 Dentro de structs.h, eu já chegado começou por 18 00:00:50,650 --> 00:00:52,560 incluindo a biblioteca de CS50. 19 00:00:52,560 --> 00:00:57,640 Estou próximo vai digitar typedef struct, e, em seguida, uma chaveta. 20 00:00:57,640 --> 00:01:01,370 Dentro da estrutura, eu vou especificar que um aluno deve ter um 21 00:01:01,370 --> 00:01:04,960 string chamada nome, e outro string chamada casa. 22 00:01:04,960 --> 00:01:08,430 Vou então fechar os colchetes, e especificar que o nome de 23 00:01:08,430 --> 00:01:11,420 este novo tipo de dados deve ser estudante. 24 00:01:11,420 --> 00:01:15,550 Em outras palavras, através desta sintaxe tenho declarou um novo tipo de meu próprio dados 25 00:01:15,550 --> 00:01:19,910 que não existia um momento atrás, e dentro deste tipo de dados são dois dados 26 00:01:19,910 --> 00:01:24,270 campos ou membros de dados, um chamado nome, uma chamada local, ambos dos quais 27 00:01:24,270 --> 00:01:25,630 são do tipo string. 28 00:01:25,630 --> 00:01:27,690 >> Vamos agora usar esse tipo em um programa real. 29 00:01:27,690 --> 00:01:30,210 30 00:01:30,210 --> 00:01:34,090 Em structs0.c, eu comecei da mesma forma eu mesmo já começou com alguns 31 00:01:34,090 --> 00:01:36,999 código clichê, e eu estou agora vai usar esses dados 32 00:01:36,999 --> 00:01:39,100 tipo estudante, como se segue. 33 00:01:39,100 --> 00:01:42,450 Vou primeiro para declarar uma matriz do tipo de estudante, eu vou 34 00:01:42,450 --> 00:01:43,920 chamar os alunos de matriz - 35 00:01:43,920 --> 00:01:44,630 plural - 36 00:01:44,630 --> 00:01:49,360 e eu vou especificar que o seu tamanho será três, que, notem, é o valor da 37 00:01:49,360 --> 00:01:50,880 as constantes ESTUDANTES - 38 00:01:50,880 --> 00:01:51,890 em todas as capitais - 39 00:01:51,890 --> 00:01:54,930 que eu tenha declarado aqui, no início do arquivo. 40 00:01:54,930 --> 00:01:58,280 Vamos agora iterar sobre os três alunos, e solicitar ao usuário 41 00:01:58,280 --> 00:02:00,050 seus nomes e casas. 42 00:02:00,050 --> 00:02:05,422 >> para int eu recebo 0, i é menos do 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 aluno. 45 00:02:11,470 --> 00:02:14,890 Eu estou indo então para começar realmente que nome do aluno, especificando 46 00:02:14,890 --> 00:02:17,290 estudantes adaptador externo. 47 00:02:17,290 --> 00:02:21,550 Em outras palavras eu quero que o aluno i-th na matriz chamou os alunos, mas agora 48 00:02:21,550 --> 00:02:25,340 Eu quero ficar nesse i-th aluno nome, e para fazer isso, eu vou usar 49 00:02:25,340 --> 00:02:30,160 o. operador, a fim de chegar a um dentro do campo específico da estrutura. 50 00:02:30,160 --> 00:02:37,100 Então eu especificar estudantes adaptador externo. Nome recebe o valor de retorno de GetString (). 51 00:02:37,100 --> 00:02:40,310 Enquanto isso, eu estou indo para imprimir algo semelhante, dizendo aluno 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 deve obter o valor de retorno de outra chamada para GetString (). 54 00:02:49,480 --> 00:02:52,350 >> Agora, vamos fazer alguma coisa com estes três nomes e as casas dos alunos, 55 00:02:52,350 --> 00:02:56,230 algo simples como impressão cada em uma frase. 56 00:02:56,230 --> 00:03:07,580 para int i se 0, novamente i é inferior a estudantes, i + +, printf "% s está em% s. 57 00:03:07,580 --> 00:03:12,600 barra invertida n ", e agora deixe-me ligar os valores desses dois campos, 58 00:03:12,600 --> 00:03:19,055 estudantes adaptador externo. nome, vírgula, estudantes adaptador externo. casa, perto 59 00:03:19,055 --> 00:03:21,290 parêntese, ponto e vírgula. 60 00:03:21,290 --> 00:03:23,020 >> E agora eu preciso fazer mais uma coisa. 61 00:03:23,020 --> 00:03:26,600 Na parte inferior deste arquivo, eu preciso liberar a memória que foi alocada 62 00:03:26,600 --> 00:03:30,290 nos bastidores por GetSring (), que claro chama malloc, a fim de 63 00:03:30,290 --> 00:03:32,500 alocar memória para as cordas o usuário digita. 64 00:03:32,500 --> 00:03:35,720 Mas isso é simples. 65 00:03:35,720 --> 00:03:42,610 para int eu recebo 0, i é inferior a estudantes, i + +, e no interior do corpo de 66 00:03:42,610 --> 00:03:48,670 este laço for, eu estou indo simplesmente para fornecer gratuitamente aos alunos suporte i. nome, 67 00:03:48,670 --> 00:03:52,300 e os alunos livres adaptador externo. casa. 68 00:03:52,300 --> 00:03:55,620 >> Agora, temos claramente utilizadas três loops neste programa, quando na verdade eu 69 00:03:55,620 --> 00:03:58,800 poderia ter usado apenas um, mas este é apenas por causa da manifestação, de modo que 70 00:03:58,800 --> 00:04:02,850 podemos especificar em três distintas os passos que exatamente estamos fazendo. 71 00:04:02,850 --> 00:04:06,120 Estamos em primeiro lugar obter um nome e uma casa para cada um dos estudantes, estamos em seguida 72 00:04:06,120 --> 00:04:08,900 imprimir o nome ea casa para cada um dos três estudantes, e 73 00:04:08,900 --> 00:04:11,910 então nós estamos indo para liberar a memória utilizado por cada um dos alunos. 74 00:04:11,910 --> 00:04:15,310 Mas certamente que poderia ter combinar isso em uma maior loop for. 75 00:04:15,310 --> 00:04:18,650 >> Vamos agora salvar, compilar e executar este programa. 76 00:04:18,650 --> 00:04:26,850 fazem estruturas 0. / structs 0, estudante de nomear, vamos fornecer David, ele vai viver 77 00:04:26,850 --> 00:04:31,580 em Mather House, nome do aluno, vamos diz Lauren, ela vai viver em Leverett 78 00:04:31,580 --> 00:04:36,590 House, nome do aluno, Rob, ele vai viver em Kirkland House. 79 00:04:36,590 --> 00:04:39,440 E, de fato, Davi está no Mather, Lauren está na Leverett, 80 00:04:39,440 --> 00:04:40,810 e Rob está em Kirkland. 81 00:04:40,810 --> 00:04:43,425