>> ΟΜΙΛΗΤΗΣ 1: Ας γράψουμε ένα πρόγραμμα που ζητά από το χρήστη για τα ονόματα και
σπίτια των τριών φοιτητών.
Τώρα, για να αποθηκεύσετε τα ονόματα και τα σπίτια θα μπορούσαμε να χρησιμοποιήσουμε, τι, έξι μεταβλητές.
Τρεις χορδές για τα ονόματα, και ένα άλλο τρεις χορδές για τα σπίτια,
αλλά ήδη γνωρίζουμε ότι μπορούμε να καθαρίσει ότι ο κωδικός χρησιμοποιώντας συστοιχίες αντ 'αυτού,
για παράδειγμα μία συστοιχία μεγέθους 3 για την τρία ονόματα, και μια άλλη σειρά από
μέγεθος 3 για τα σπίτια.
Αλλά τελικά μπορούμε να το καθαρίσω αυτό ακόμη περισσότερο, και πραγματικά να κρατήσει εκείνες
τα ονόματα και τα σπίτια μαζί, έτσι ώστε να το όνομα του μαθητή και στην οικία του ή της
είναι κατά κάποιο τρόπο κάψουλα, έτσι για να μιλούν, στην ίδια μεταβλητή.
>> Για να γίνει αυτό, όμως, θα πρέπει να δηλώσουν το δικό μας τύπο δεδομένων, το δικό μας τύπο σε C,
ότι οι συντάκτες της C δεν ήταν κατ 'ανάγκην σκεφτείτε χρόνια πριν.
Για να γίνει αυτό μπορούμε να χρησιμοποιήσουμε τη λέξη-κλειδί typedef, μαζί με την
άλλη λέξη-κλειδί struct.
Ας ρίξουμε μια ματιά.
Μέσα από structs.h, έχω ήδη πάρει ξεκίνησε με
συμπεριλαμβανομένης και της βιβλιοθήκης CS50.
Είμαι δίπλα πρόκειται να πληκτρολογήσετε struct typedef, και, στη συνέχεια, ένα άγκιστρο.
Μέσα από το struct, Πάω να διευκρινίζουν ότι ένας φοιτητής πρέπει να έχει ένα
σειρά που ονομάζεται όνομα, και ένα άλλο συμβολοσειρά που ονομάζεται σπίτι.
Πάω να κλείστε άγκιστρα μου, και διευκρινίζουν ότι το όνομα του
αυτό το νέο τύπο δεδομένων πρέπει να είναι φοιτητής.
Με άλλα λόγια, μέσω της παρούσας σύνταξη έχω κήρυξε ένα νέο τύπο δεδομένων της δικής μου
που δεν υπήρχε πριν από λίγο, και εσωτερικό αυτού του τύπου δεδομένων είναι δύο στοιχεία
πεδία ή μέλη δεδομένων, που ονομάζεται το όνομα, ένα ονομάζεται σπίτι, δύο εκ των οποίων
είναι τύπου string.
>> Ας δούμε τώρα χρησιμοποιούν αυτόν τον τύπο σε ένα πραγματικό πρόγραμμα.
Σε structs0.c, έχω πάρει παρόμοια ο ίδιος ξεκίνησε ήδη με κάποια
Κωδικός στερεότυπο, και είμαι τώρα πρόκειται να χρησιμοποιήσετε αυτά τα δεδομένα
πληκτρολογήστε φοιτητής, ως εξής.
Είμαι πρώτος πρόκειται να κηρύξει μια σειρά από φοιτητή τύπου, εγώ θα
Καλέστε τους σπουδαστές array -
πληθυντικό -
και θα διευκρινίζεται ότι το μέγεθός του θα είναι τρία, τα οποία, ανακοίνωση, είναι η αξία της
οι συνεχείς ΦΟΙΤΗΤΕΣ -
σε όλες τις πρωτεύουσες -
ότι έχω δηλωθεί εδώ, νωρίτερα στο αρχείο.
Ας δούμε τώρα τη συνεχή επανάληψη αυτών των τριών φοιτητές, και προτρέπει το χρήστη για
τα ονόματα και τα σπίτια τους.
>> int για να πάρω 0, i είναι λιγότερο από εκείνο το σταθερό, i + +.
Και τώρα στο εσωτερικό του σώματος αυτού για βρόχο, Πάω να εκτυπώσετε κάτι
όπως το όνομα του μαθητή.
Είμαι στη συνέχεια πρόκειται να πάρει πραγματικά ότι το όνομα του μαθητή του, καθορίζοντας
μαθητές περικλείουν i.
Με άλλα λόγια, θέλω το i-ου μαθητή στην σειρά που ονομάζεται μαθητών, αλλά τώρα
Θέλω να πάρω σε αυτό το i-ου μαθητή όνομα, και να το κάνουμε αυτό, είμαι πρόκειται να χρησιμοποιήσετε
το. φορέα, προκειμένου να πάρει μια ειδικά στο εσωτερικό πεδίο του struct.
Γι 'αυτό και προσδιορίζει τους μαθητές περικλείουν i. Το όνομα παίρνει την τιμή επιστροφής της GetString ().
Εν τω μεταξύ, Πάω να εκτυπώσετε κάτι παρόμοιο, λέγοντας μαθητή
το σπίτι, και τώρα Πάω να καθορίσετε ότι το πεδίο φοιτητών σπίτι i-th
πρέπει να πάρετε την τιμή επιστροφής της άλλη κλήση σε GetString ().
>> Τώρα ας κάνουμε κάτι με αυτά τα τρία τα ονόματα και τα σπίτια των μαθητών,
κάτι απλό όπως εκτύπωση κάθε έξω σε μια πρόταση.
για int i πάρει 0, πάλι θ είναι μικρότερη από φοιτητές, i + +, printf "% s είναι% s.
backslash n ", και τώρα επιτρέψτε μου να συνδέσετε οι τιμές των δύο αυτών πεδίων,
μαθητές περικλείουν i. το όνομα, το κόμμα, μαθητές περικλείουν i. σπίτι, κοντά
paren, τελεία.
>> Και τώρα πρέπει να κάνω κάτι ακόμα.
Στο κάτω μέρος αυτού του αρχείου, θα πρέπει να ελευθερώσετε τη μνήμη που διατέθηκε
πίσω από τις σκηνές από GetSring (), η οποία καλεί φυσικά malloc, προκειμένου να
εκχωρήσει μνήμη για τις χορδές ο χρήστης πληκτρολογεί.
Αλλά αυτό είναι απλό.
int για να πάρω 0, i είναι μικρότερο από μαθητών, ί + +, και μέσα στο σώμα του
αυτό για βρόχο, είμαι απλώς πρόκειται να παρέχουν δωρεάν βραχίονα φοιτητές i. το όνομα,
και δωρεάν φοιτητές περικλείουν i. σπίτι.
>> Τώρα, έχουμε χρησιμοποιούνται σαφώς για τρεις βρόχους σε αυτό το πρόγραμμα, όταν πραγματικά μου
θα μπορούσαν να έχουν χρησιμοποιηθεί μόνο ένα, αλλά αυτό είναι μόνο για λόγους επίδειξης, έτσι ώστε
μπορούμε να καθορίσουμε σε τρεις διαφορετικές βήματα τι ακριβώς κάνουμε.
Είμαστε το πρώτο να πάρει ένα όνομα και ένα σπίτι για κάθε ένα από τους μαθητές, είμαστε συνέχεια
εκτύπωση το όνομα και το σπίτι για καθεμία από τις τρεις φοιτητές και
Στη συνέχεια θα πάμε για να ελευθερώσετε τη μνήμη χρησιμοποιείται από κάθε μαθητή.
Αλλά σίγουρα θα μπορούσαμε να έχουμε συνδυάσει αυτό σε ένα μεγαλύτερο για τους βρόχο.
>> Ας σώσει τώρα, την κατάρτιση, και τρέξτε το πρόγραμμα.
κάνουν structs 0. / structs 0, μαθητή όνομα, ας παρέχουν Δαβίδ, αυτός θα ζήσει
σε Mather House, το όνομα του μαθητή, ας λένε Lauren, που θα ζουν σε Leverett
Σπίτι, το όνομα του μαθητή του, Rob, αυτός θα ζουν σε Kirkland House.
Και πράγματι, ο David είναι σε Mather, Lauren είναι σε Leverett,
και ο Rob είναι σε Kirkland.