פונקציה למילוי פרטי איש קשר
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C של Coddy. שיעור 52 מתוך 63.
אתגר
קלבהמשך לפונקציה ליצירת איש קשר מהשיעור הקודם, צרו פונקציה שממלאת פרטי איש קשר באמצעות קלט מהמשתמש. התוכנית שלכם צריכה:
- להשתמש באותה הגדרת struct בשם
Contactמהשיעורים הקודמים, עם השדות:- מערך תווים בשם
nameבגודל 50 - מערך תווים בשם
phoneבגודל 20 - מערך תווים בשם
emailבגודל 40 - מספר שלם בשם
age
- מערך תווים בשם
- להשתמש באותה פונקציה
createContactמהשיעור הקודם, אשר:- מקצה באופן דינמי זיכרון עבור struct מסוג
Contact - מאתחלת את כל השדות לערכי ברירת המחדל
- מחזירה מצביע לאיש הקשר
- מקצה באופן דינמי זיכרון עבור struct מסוג
- לכתוב פונקציה בשם
populateContactאשר:- מקבלת מצביע ל-struct מסוג
Contactכפרמטר - אינה מחזירה דבר (void)
- מבקשת מהמשתמש קלט וקוראת את הנתונים הבאים בדיוק בסדר הזה:
- מדפיסה
Enter name:וקוראת מחרוזת לשדה השם באמצעותscanf("%s", contactPtr->name) - מדפיסה
Enter phone:וקוראת מחרוזת לשדה הטלפון באמצעותscanf("%s", contactPtr->phone) - מדפיסה
Enter email:וקוראת מחרוזת לשדה הדוא"ל באמצעותscanf("%s", contactPtr->email) - מדפיסה
Enter age:וקוראת מספר שלם לשדה הגיל באמצעותscanf("%d", &contactPtr->age)
- מדפיסה
- לאחר קריאת כל הקלט, מאמתת את הנתונים:
- אם הגיל קטן מ-0 או גדול מ-120, מדפיסה
Invalid age entered - אם אורך מספר הטלפון קטן מ-10 תווים (השתמשו ב-
strlen()), מדפיסהInvalid phone number - אם כל בדיקות האימות עוברות, מדפיסה
Contact populated successfully
- אם הגיל קטן מ-0 או גדול מ-120, מדפיסה
- מקבלת מצביע ל-struct מסוג
- בפונקציה הראשית:
- ליצור איש קשר באמצעות הפונקציה
createContact - לבדוק אם יצירת איש הקשר הצליחה
- לקרוא לפונקציה
populateContactכדי למלא את פרטי איש הקשר - לאחר מילוי הפרטים, להציג את פרטי איש הקשר באמצעות אופרטור החץ בתבנית המדויקת הזו:
Contact Information:Name: [name]Phone: [phone]Email: [email]Age: [age]
- לשחרר את הזיכרון שהוקצה באופן דינמי
- להדפיס
Contact deleted successfully
- ליצור איש קשר באמצעות הפונקציה
האתגר הזה מדגים כיצד ליצור פונקציות שמשנות נתוני struct באמצעות מצביעים. הפונקציה populateContact מקבלת מצביע לאיש הקשר ומשתמשת באופרטור החץ כדי לשנות ישירות את השדות של ה-struct המקורי. תתרגלו טיפול בקלט מהמשתמש, אימות נתונים ועבודה עם structs שהוקצו באופן דינמי באמצעות פרמטרים של פונקציה.
נסו בעצמכם
#include <stdio.h>
#include <stdlib.h>
struct Contact {
char name[50];
char phone[20];
char email[40];
int age;
};
struct Contact* createContact() {
struct Contact* contactPtr = (struct Contact*)malloc(sizeof(struct Contact));
if (contactPtr == NULL) {
printf("Memory allocation failed\n");
return NULL;
}
printf("Contact created successfully\n");
contactPtr->name[0] = '\0';
contactPtr->phone[0] = '\0';
contactPtr->email[0] = '\0';
contactPtr->age = 0;
return contactPtr;
}
int main() {
struct Contact* newContact;
newContact = createContact();
if (newContact == NULL) {
printf("Failed to create contact\n");
return 1;
}
printf("Contact initialized with default values\n");
printf("Default Contact Values:\n");
printf("Name: %s\n", newContact->name);
printf("Phone: %s\n", newContact->phone);
printf("Email: %s\n", newContact->email);
printf("Age: %d\n", newContact->age);
free(newContact);
printf("Memory freed successfully\n");
return 0;
}כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1יסודות המצביעים
מהו מצביע?הכרזה על מצביעיםאופרטור לקיחת הכתובת (&)אופרטור ביטול ההפניה (*)מצביעי NULLסיכום: יסודות המצביעים2מצביעים ומערכים
שמות מערכים כמצביעיםאיברי מערך ומצביעיםאריתמטיקה של מצביעיםהשוואת מצביעיםסיכום: מעבר על מערך באמצעות מצביעים5מצביעים ופונקציות
העברה לפי ערךהעברת מצביעים לפונקציותשינוי משתנים באמצעות מצביעיםדוגמה קלאסית: החלפההעברת מערכים לפונקציותחזרה: ארגומנטים של מצביעי פונקציה3מערכי תווים ומחרוזות
מחרוזות כמערכי charתו הסיום nullקלט מחרוזת באמצעות scanfשימוש ב־strlen()שימוש ב־strcpy()שימוש ב־strcat()שימוש ב־strcmp()סיכום: פונקציות מחרוזת בסיסיות6ניהול זיכרון
זיכרון מחסנית לעומת ערימההקצאה דינמית - malloc()שימוש ב-sizeof() להקצאהבדיקת כישלון בהקצאהשחרור זיכרון באמצעות free()הקצאה באמצעות calloc()סיכום: מערך דינמי9פרויקט: רישום איש קשר פשוט
פרויקט: הגדרת מבנה איש קשרפונקציה ליצירת איש קשרתרגלו בעצמכם: קומפיילר C אונליין