LUIDSPREKER 1: Laten we een programma schrijven dat vraagt ​​de gebruiker om de namen en huizen van drie studenten. Nu, om die namen en huizen op te slaan we kunnen gebruiken, wat zes variabelen. Drie snaren voor de namen, en een ander drie snaren voor de huizen, maar we weten al dat we kunnen opruimen die code met behulp van arrays in plaats daarvan, bijvoorbeeld een array van grootte 3 voor de drie namen en een reeks maat 3 voor de huizen. Maar het blijkt dat we dit opruimen nog verder, en eigenlijk die bewaren namen en huizen samen, zodat een naam van de student en zijn of haar huis een of andere manier ingekapseld, om zo te spreken in dezelfde variabele. Om dit te doen, hoewel, we moeten verklaren onze eigen data type, onze eigen soort in C, dat de auteurs van C niet noodzakelijkerwijs denken van jaren geleden. Om dit te doen kunnen we het trefwoord gebruiken typedef, samen met de andere keyword struct. Laten we eens een kijkje nemen. Binnenkant van structs.h, ik heb al gekregen gestart door waaronder de CS50 bibliotheek. Ik ga naast ga typedef struct typen, en dan een accolade. Binnenkant van de structuur, ik ga specificeren dat een student moet een koord genoemd naam en andere snaar genoemd huis. Ik ga dan sluit mijn accolades, en aangeven dat de naam van dit nieuwe type gegevens zijn student. Met andere woorden, via deze syntax I verklaarde een nieuw datatype van mijn eigen dat niet bestond een moment geleden, en binnen dit gegevenstype zijn twee data velden of gegevens leden, een zogenaamde naam, een zogenaamde huis, beide zijn van het type string. Laten we nu gebruik maken van dit type een actuele programma. In structs0.c, ik heb zo ook gekregen mezelf begon al met een aantal standaardtekst code, en ik ben nu zal deze gegevens gebruiken Typ student, als volgt. Ik ga eerst naar een verklaren reeks van het type student, ik zal roepen de array studenten - meervoud - en ik zal aangeven dat de omvang zal zijn drie, die, bericht, is de waarde van de constante STUDENTEN - in alle hoofdsteden - die ik hier heb verklaard up, eerder in het bestand. Laten we nu itereren over die drie studenten, en vraagt ​​de gebruiker om hun namen en huizen. voor int krijg ik 0, i minder dan dat constante, i + +. En nu de binnenkant van het lichaam van deze voor lus, ik ga om uit te printen iets zoals de naam van de student. Ik ben dan gaan om daadwerkelijk te krijgen dat naam van de student door het specificeren studenten beugel i. Met andere woorden wil ik de i-de student in de array genaamd studenten, maar nu Ik wil op die i-de student te krijgen naam, en om dit te doen, ga ik gebruiken het. exploitant, om op een te krijgen specifiek gebied binnen de structuur. Dus ik opgeven studenten beugel i. Naam krijgt de return waarde van GetString (). Ondertussen ga ik om uit te printen iets dergelijks, zegt student huis, en nu ga ik om aan te geven dat de i-de studenten huis veld zal de return waarde van krijgen een ander gesprek te GetString (). Nu laten we iets doen met deze drie namen en huizen van studenten, iets simpels als het afdrukken elk in een zin. voor int i Get 0, nogmaals ik minder dan studenten, i + +, printf "% s is% s. backslash n ", en nu laat ik de stekker in de waarden van deze twee velden, studenten beugel i. naam, komma, studenten beugel i. huis, dichtbij Paren, puntkomma. En nu moet ik nog een ding doen. Aan de onderkant van dit bestand, moet ik vrij het geheugen dat werd toegewezen achter de schermen door GetSring (), die roept natuurlijk malloc, om geheugen toewijzen voor de snaren de gebruiker typt. Maar dit is eenvoudig. voor int krijg ik 0, i minder dan studenten, i + +, en in het lichaam van deze for loop, ga ik gewoon naar bieden gratis studenten beugel i. naam, en vrije studenten beugel i. huis. Nu, we hebben duidelijk gebruik gemaakt van drie lussen in dit programma, wanneer ze echt ik kon gewoon hebben gebruikt men, maar dit is alleen omwille demonstratie, dus dat we kunnen specificeren in drie verschillende stappen wat we precies aan het doen zijn. We krijgen eerst een naam en een huis voor elk van de studenten, we zijn dan het afdrukken van de naam en het huis voor elk van de drie studenten en dan gaan we naar het geheugen vrij gebruikt door elk van de studenten. Maar toch konden we hebben dit combineren in een grotere lus. Laten we nu nog redden, compileren, en uitvoeren van deze programma. maken structs 0. / structs 0, student te noemen, laten we zorgen voor David, zal hij leven in Mather House, naam van de student, laten we zeggen Lauren, zal ze in Leverett wonen House, naam van de student, Rob, zal hij wonen in Kirkland House. En inderdaad, David is Mather, Lauren is in Leverett, en Rob is in Kirkland.