سرور 1: دعونا كتابة البرنامج الذي يطالب المستخدم عن أسماء و بيوت ثلاثة طلاب. الآن، لتخزين تلك الأسماء والمنازل يمكن أن نستخدمها، ما، ستة متغيرات. ثلاث سلاسل للأسماء، وآخر ثلاث سلاسل للمنازل، ولكننا نعلم بالفعل أن نتمكن من تنظيف هذا الرمز باستخدام صفائف بدلا من ذلك، على سبيل المثال مجموعة من حجم 3 ل ثلاثة أسماء، ومجموعة أخرى من حجم 3 لالمنازل. ولكن تبين أننا يمكن تنظيف هذا أبعد من ذلك، وبالفعل تبقى تلك أسماء والبيوت معا، بحيث اسم الطالب وله أو بيتها يتم تغليف بطريقة أو بأخرى، وذلك ل الكلام، في نفس المتغير. للقيام بذلك، على الرغم من أننا بحاجة إلى إعلان لدينا نوع البيانات الخاصة، ونوع في منطقتنا C، أن واضعي C فعل ليس بالضرورة التفكير منذ سنوات. للقيام بذلك يمكننا استخدام الكلمة الرموز المميزة ل typedef، جنبا إلى جنب مع غيرها من البنية الكلمة. دعونا نلقي نظرة. داخل structs.h، لقد بالفعل حصلت التي كتبها بما في ذلك مكتبة CS50. انا ذاهب بجانب اكتب الرموز المميزة ل typedef البنية، ثم متعرج. داخل البنية، وانا ذاهب ل تحديد أن الطالب يكون له سلسلة دعا اسمه، وآخر سلسلة دعا البيت. انا ذاهب الى بلدي ثم إغلاق الأقواس المتعرجة، وحدد أن اسم هذا النوع يجب أن يكون الطالب البيانات الجديدة. وبعبارة أخرى، عبر بناء الجملة هذا يكون أنا أعلن نوع بيانات جديدة من بلدي التي لم تكن موجودة قبل لحظة، و داخل هذا النوع من البيانات هي البيانات اثنين الحقول أو أعضاء البيانات، واحد يسمى اسمها، واحد يسمى المنزل، وكلاهما هي من نوع السلسلة. دعونا الآن استخدام هذا النوع في برنامج الفعلية. في structs0.c، لقد حصلت على نحو مماثل نفسي بدأت بالفعل مع بعض كود النمطي، وأنا الآن تنوي استخدام هذه البيانات اكتب الطالب، على النحو التالي. انا ذاهب الأولى لإعلان مجموعة من نوع الطالب، وسوف أكون استدعاء الطلاب مجموعة - الجمع - وسوف تحدد أن حجمه سيكون الثلاثة، والتي، لاحظ، هو قيمة الطلاب المستمر - في جميع عواصم - لقد أعلن أنه هنا، في ملف في وقت سابق. دعونا الآن أكثر من تكرار هؤلاء الثلاثة الطلاب، ومطالبة المستخدم أسمائهم والمنازل. للحصول على كثافة العمليات ط 0، ط أقل من أن المراجعة المستمرة، ط + +. والآن داخل الجسم من هذا ل حلقة، وانا ذاهب لطباعة شيء مثل اسم الطالب. أنا ثم الذهاب للحصول الواقع أن اسم الطالب عن طريق تحديد الطلاب قوس ط. وبعبارة أخرى أريد الطالب ط ال في مجموعة تسمى الطلاب، ولكن الآن أريد الحصول في ذلك ط ال طالب اسم، والقيام بذلك، انا ذاهب الى استخدام و. المشغل، من أجل الحصول على داخل حقل معين من البنية. ولذا فإنني تحديد الطلاب قوس ط. اسم يحصل على قيمة الإرجاع GetString (). وفي الوقت نفسه، انا ذاهب لطباعة شيئا من هذا القبيل، وقال الطالب المنزل، والآن أنا ذاهب لتحديد أن الحقل الطلاب منزل ط ال يجب الحصول على قيمة الإرجاع مكالمة أخرى إلى GetString (). الآن دعونا نفعل شيئا مع هؤلاء الثلاثة أسماء الطلاب والمنازل، شيء بسيط مثل الطباعة كل من في الجملة. للحصول على كثافة العمليات ط 0، ومرة ​​أخرى أنا أقل من الطلاب، ط + +، printf "٪ s في٪ ق. مائل ن "، والآن اسمحوا لي أن سد العجز في قيم تلك الحقول اثنين، الطلاب قوس ط. الاسم، فاصلة، الطلاب قوس ط. المنزل، على مقربة PAREN، منقوطة. والآن يجب أن أفعل شيئا آخر. في الجزء السفلي من هذا الملف، ولست بحاجة ل تحرير الذاكرة التي تم تخصيصها وراء الكواليس من قبل GetSring ()، الذي يدعو بالطبع malloc، من أجل تخصيص الذاكرة لسلاسل أنواع المستخدم. ولكن هذا هو بسيط. للحصول على كثافة العمليات ط 0، ط أقل من الطلاب، ط + +، وداخل جسد هذا للحلقة، وأنا ببساطة الذهاب الى توفير قوس الطلاب مجانا ط. الاسم، والطلاب مجانا قوس ط. المنزل. الآن، ونحن قد استخدمت بشكل واضح لثلاث حلقات في هذا البرنامج، عندما حقا أنا يمكن أن تستخدم واحدة فقط، ولكن هذا هو فقط لمجرد مظاهرة، بحيث يمكننا تحديد في ثلاثة متميزة الخطوات بالضبط ما نفعله. نحن نحصل على أول اسم ومنزل لكل من الطلاب، ونحن بعد ذلك طبع اسم وبيت ل كل من الطلاب الثلاثة، و ثم ونحن في طريقنا لتحرير الذاكرة المستخدمة من قبل كل من الطلاب. ولكن من المؤكد أننا يمكن أن لقد الجمع بين هذه في واحدة أكبر للحلقة. دعونا الآن حفظ وتجميع، وتشغيل هذا البرنامج. جعل البنيات 0. / البنيات 0، الطالب اسم، دعونا توفير ديفيد، وانه سوف يعيش في ماثر البيت، اسم الطالب، دعونا ويقول لورين، وقالت انها سوف تعيش في يفيريت المنزل، اسم الطالب، روب، وانه سوف يعيش في بيت كيركلاند. وبالفعل، ديفيد هو في ماذر، لورين هو في يفيريت، وروب هو في كيركلاند.