COLUNA 1: Vamos escrever um programa que solicita ao usuário os nomes e casas de três alunos. Agora, para armazenar os nomes e as casas nós poderíamos usar, o que, seis variáveis. Três cordas para os nomes, e outra três cordas para as casas, mas já sabemos que podemos limpar que o código usando matrizes em vez disso, por exemplo uma matriz de tamanho 3 para a três nomes, e um outro conjunto de tamanho 3 para as casas. Mas acontece que nós podemos limpar isso ainda mais longe, e realmente manter os nomes e casas em conjunto, de modo que um nome do aluno e sua casa são de alguma forma encapsulada, por assim falar, para a mesma variável. Para fazer isso, porém, precisamos de declarar o nosso próprio tipo de dados, nosso próprio tipo em C, que os autores do C não necessariamente acho que de anos atrás. Para fazer isso, podemos usar a palavra-chave typedef, juntamente com o outra struct palavra-chave. Vamos dar uma olhada. Dentro de structs.h, eu já chegado começou por incluindo a biblioteca de CS50. Estou próximo vai digitar typedef struct, e, em seguida, uma chaveta. Dentro da estrutura, eu vou especificar que um aluno deve ter um string chamada nome, e outro string chamada casa. Vou então fechar os colchetes, e especificar que o nome de este novo tipo de dados deve ser estudante. Em outras palavras, através desta sintaxe tenho declarou um novo tipo de meu próprio dados que não existia um momento atrás, e dentro deste tipo de dados são dois dados campos ou membros de dados, um chamado nome, uma chamada local, ambos dos quais são do tipo string. Vamos agora usar esse tipo em um programa real. Em structs0.c, eu comecei da mesma forma eu mesmo já começou com alguns código clichê, e eu estou agora vai usar esses dados tipo estudante, como se segue. Vou primeiro para declarar uma matriz do tipo de estudante, eu vou chamar os alunos de matriz - plural - e eu vou especificar que o seu tamanho será três, que, notem, é o valor da as constantes ESTUDANTES - em todas as capitais - que eu tenha declarado aqui, no início do arquivo. Vamos agora iterar sobre os três alunos, e solicitar ao usuário seus nomes e casas. para int eu recebo 0, i é menos do que a constante, i + +. E agora dentro do corpo deste para loop, eu vou imprimir algo como o nome do aluno. Eu estou indo então para começar realmente que nome do aluno, especificando estudantes adaptador externo. Em outras palavras eu quero que o aluno i-th na matriz chamou os alunos, mas agora Eu quero ficar nesse i-th aluno nome, e para fazer isso, eu vou usar o. operador, a fim de chegar a um dentro do campo específico da estrutura. Então eu especificar estudantes adaptador externo. Nome recebe o valor de retorno de GetString (). Enquanto isso, eu estou indo para imprimir algo semelhante, dizendo aluno casa, e agora eu vou especificar que o campo de estudantes casa i-th deve obter o valor de retorno de outra chamada para GetString (). Agora, vamos fazer alguma coisa com estes três nomes e as casas dos alunos, algo simples como impressão cada em uma frase. para int i se 0, novamente i é inferior a estudantes, i + +, printf "% s está em% s. barra invertida n ", e agora deixe-me ligar os valores desses dois campos, estudantes adaptador externo. nome, vírgula, estudantes adaptador externo. casa, perto parêntese, ponto e vírgula. E agora eu preciso fazer mais uma coisa. Na parte inferior deste arquivo, eu preciso liberar a memória que foi alocada nos bastidores por GetSring (), que claro chama malloc, a fim de alocar memória para as cordas o usuário digita. Mas isso é simples. para int eu recebo 0, i é inferior a estudantes, i + +, e no interior do corpo de este laço for, eu estou indo simplesmente para fornecer gratuitamente aos alunos suporte i. nome, e os alunos livres adaptador externo. casa. Agora, temos claramente utilizadas três loops neste programa, quando na verdade eu poderia ter usado apenas um, mas este é apenas por causa da manifestação, de modo que podemos especificar em três distintas os passos que exatamente estamos fazendo. Estamos em primeiro lugar obter um nome e uma casa para cada um dos estudantes, estamos em seguida imprimir o nome ea casa para cada um dos três estudantes, e então nós estamos indo para liberar a memória utilizado por cada um dos alunos. Mas certamente que poderia ter combinar isso em uma maior loop for. Vamos agora salvar, compilar e executar este programa. fazem estruturas 0. / structs 0, estudante de nomear, vamos fornecer David, ele vai viver em Mather House, nome do aluno, vamos diz Lauren, ela vai viver em Leverett House, nome do aluno, Rob, ele vai viver em Kirkland House. E, de fato, Davi está no Mather, Lauren está na Leverett, e Rob está em Kirkland.