2 00:00:00,000 --> 00:00:02,760 >> LUIDSPREKER 1: Laten we een programma schrijven dat vraagt ​​de gebruiker om de namen en 3 00:00:02,760 --> 00:00:04,700 huizen van drie studenten. 4 00:00:04,700 --> 00:00:08,840 Nu, om die namen en huizen op te slaan we kunnen gebruiken, wat zes variabelen. 5 00:00:08,840 --> 00:00:12,260 Drie snaren voor de namen, en een ander drie snaren voor de huizen, 6 00:00:12,260 --> 00:00:16,560 maar we weten al dat we kunnen opruimen die code met behulp van arrays in plaats daarvan, 7 00:00:16,560 --> 00:00:20,220 bijvoorbeeld een array van grootte 3 voor de drie namen en een reeks 8 00:00:20,220 --> 00:00:22,110 maat 3 voor de huizen. 9 00:00:22,110 --> 00:00:25,870 Maar het blijkt dat we dit opruimen nog verder, en eigenlijk die bewaren 10 00:00:25,870 --> 00:00:30,520 namen en huizen samen, zodat een naam van de student en zijn of haar huis 11 00:00:30,520 --> 00:00:34,940 een of andere manier ingekapseld, om zo te spreken in dezelfde variabele. 12 00:00:34,940 --> 00:00:39,095 >> Om dit te doen, hoewel, we moeten verklaren onze eigen data type, onze eigen soort in C, 13 00:00:39,095 --> 00:00:42,660 dat de auteurs van C niet noodzakelijkerwijs denken van jaren geleden. 14 00:00:42,660 --> 00:00:45,630 Om dit te doen kunnen we het trefwoord gebruiken typedef, samen met de 15 00:00:45,630 --> 00:00:47,200 andere keyword struct. 16 00:00:47,200 --> 00:00:48,160 Laten we eens een kijkje nemen. 17 00:00:48,160 --> 00:00:50,650 Binnenkant van structs.h, ik heb al gekregen gestart door 18 00:00:50,650 --> 00:00:52,560 waaronder de CS50 bibliotheek. 19 00:00:52,560 --> 00:00:57,640 Ik ga naast ga typedef struct typen, en dan een accolade. 20 00:00:57,640 --> 00:01:01,370 Binnenkant van de structuur, ik ga specificeren dat een student moet een 21 00:01:01,370 --> 00:01:04,960 koord genoemd naam en andere snaar genoemd huis. 22 00:01:04,960 --> 00:01:08,430 Ik ga dan sluit mijn accolades, en aangeven dat de naam van 23 00:01:08,430 --> 00:01:11,420 dit nieuwe type gegevens zijn student. 24 00:01:11,420 --> 00:01:15,550 Met andere woorden, via deze syntax I verklaarde een nieuw datatype van mijn eigen 25 00:01:15,550 --> 00:01:19,910 dat niet bestond een moment geleden, en binnen dit gegevenstype zijn twee data 26 00:01:19,910 --> 00:01:24,270 velden of gegevens leden, een zogenaamde naam, een zogenaamde huis, beide 27 00:01:24,270 --> 00:01:25,630 zijn van het type string. 28 00:01:25,630 --> 00:01:27,690 >> Laten we nu gebruik maken van dit type een actuele programma. 29 00:01:27,690 --> 00:01:30,210 30 00:01:30,210 --> 00:01:34,090 In structs0.c, ik heb zo ook gekregen mezelf begon al met een aantal 31 00:01:34,090 --> 00:01:36,999 standaardtekst code, en ik ben nu zal deze gegevens gebruiken 32 00:01:36,999 --> 00:01:39,100 Typ student, als volgt. 33 00:01:39,100 --> 00:01:42,450 Ik ga eerst naar een verklaren reeks van het type student, ik zal 34 00:01:42,450 --> 00:01:43,920 roepen de array studenten - 35 00:01:43,920 --> 00:01:44,630 meervoud - 36 00:01:44,630 --> 00:01:49,360 en ik zal aangeven dat de omvang zal zijn drie, die, bericht, is de waarde van 37 00:01:49,360 --> 00:01:50,880 de constante STUDENTEN - 38 00:01:50,880 --> 00:01:51,890 in alle hoofdsteden - 39 00:01:51,890 --> 00:01:54,930 die ik hier heb verklaard up, eerder in het bestand. 40 00:01:54,930 --> 00:01:58,280 Laten we nu itereren over die drie studenten, en vraagt ​​de gebruiker om 41 00:01:58,280 --> 00:02:00,050 hun namen en huizen. 42 00:02:00,050 --> 00:02:05,422 >> voor int krijg ik 0, i minder dan dat constante, i + +. 43 00:02:05,422 --> 00:02:08,600 En nu de binnenkant van het lichaam van deze voor lus, ik ga om uit te printen iets 44 00:02:08,600 --> 00:02:11,470 zoals de naam van de student. 45 00:02:11,470 --> 00:02:14,890 Ik ben dan gaan om daadwerkelijk te krijgen dat naam van de student door het specificeren 46 00:02:14,890 --> 00:02:17,290 studenten beugel i. 47 00:02:17,290 --> 00:02:21,550 Met andere woorden wil ik de i-de student in de array genaamd studenten, maar nu 48 00:02:21,550 --> 00:02:25,340 Ik wil op die i-de student te krijgen naam, en om dit te doen, ga ik gebruiken 49 00:02:25,340 --> 00:02:30,160 het. exploitant, om op een te krijgen specifiek gebied binnen de structuur. 50 00:02:30,160 --> 00:02:37,100 Dus ik opgeven studenten beugel i. Naam krijgt de return waarde van GetString (). 51 00:02:37,100 --> 00:02:40,310 Ondertussen ga ik om uit te printen iets dergelijks, zegt student 52 00:02:40,310 --> 00:02:45,410 huis, en nu ga ik om aan te geven dat de i-de studenten huis veld 53 00:02:45,410 --> 00:02:49,480 zal de return waarde van krijgen een ander gesprek te GetString (). 54 00:02:49,480 --> 00:02:52,350 >> Nu laten we iets doen met deze drie namen en huizen van studenten, 55 00:02:52,350 --> 00:02:56,230 iets simpels als het afdrukken elk in een zin. 56 00:02:56,230 --> 00:03:07,580 voor int i Get 0, nogmaals ik minder dan studenten, i + +, printf "% s is% s. 57 00:03:07,580 --> 00:03:12,600 backslash n ", en nu laat ik de stekker in de waarden van deze twee velden, 58 00:03:12,600 --> 00:03:19,055 studenten beugel i. naam, komma, studenten beugel i. huis, dichtbij 59 00:03:19,055 --> 00:03:21,290 Paren, puntkomma. 60 00:03:21,290 --> 00:03:23,020 >> En nu moet ik nog een ding doen. 61 00:03:23,020 --> 00:03:26,600 Aan de onderkant van dit bestand, moet ik vrij het geheugen dat werd toegewezen 62 00:03:26,600 --> 00:03:30,290 achter de schermen door GetSring (), die roept natuurlijk malloc, om 63 00:03:30,290 --> 00:03:32,500 geheugen toewijzen voor de snaren de gebruiker typt. 64 00:03:32,500 --> 00:03:35,720 Maar dit is eenvoudig. 65 00:03:35,720 --> 00:03:42,610 voor int krijg ik 0, i minder dan studenten, i + +, en in het lichaam van 66 00:03:42,610 --> 00:03:48,670 deze for loop, ga ik gewoon naar bieden gratis studenten beugel i. naam, 67 00:03:48,670 --> 00:03:52,300 en vrije studenten beugel i. huis. 68 00:03:52,300 --> 00:03:55,620 >> Nu, we hebben duidelijk gebruik gemaakt van drie lussen in dit programma, wanneer ze echt ik 69 00:03:55,620 --> 00:03:58,800 kon gewoon hebben gebruikt men, maar dit is alleen omwille demonstratie, dus dat 70 00:03:58,800 --> 00:04:02,850 we kunnen specificeren in drie verschillende stappen wat we precies aan het doen zijn. 71 00:04:02,850 --> 00:04:06,120 We krijgen eerst een naam en een huis voor elk van de studenten, we zijn dan 72 00:04:06,120 --> 00:04:08,900 het afdrukken van de naam en het huis voor elk van de drie studenten en 73 00:04:08,900 --> 00:04:11,910 dan gaan we naar het geheugen vrij gebruikt door elk van de studenten. 74 00:04:11,910 --> 00:04:15,310 Maar toch konden we hebben dit combineren in een grotere lus. 75 00:04:15,310 --> 00:04:18,650 >> Laten we nu nog redden, compileren, en uitvoeren van deze programma. 76 00:04:18,650 --> 00:04:26,850 maken structs 0. / structs 0, student te noemen, laten we zorgen voor David, zal hij leven 77 00:04:26,850 --> 00:04:31,580 in Mather House, naam van de student, laten we zeggen Lauren, zal ze in Leverett wonen 78 00:04:31,580 --> 00:04:36,590 House, naam van de student, Rob, zal hij wonen in Kirkland House. 79 00:04:36,590 --> 00:04:39,440 En inderdaad, David is Mather, Lauren is in Leverett, 80 00:04:39,440 --> 00:04:40,810 en Rob is in Kirkland. 81 00:04:40,810 --> 00:04:43,425