Menu
Coddy logo textTech

פונקציה ליצירת איש קשר

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C של Coddy. שיעור 51 מתוך 63.

challenge icon

אתגר

קל

בהתבסס על מבנה ה־Contact שלך מהשיעור הקודם, צור פונקציה שמקצה באופן דינמי זיכרון לאיש קשר חדש. התוכנית שלך צריכה:

  1. להשתמש באותה הגדרת מבנה Contact מהשיעור הקודם, עם האיברים הבאים:
    • מערך תווים name בגודל 50
    • מערך תווים phone בגודל 20
    • מערך תווים email בגודל 40
    • מספר שלם age
  2. לכתוב פונקציה בשם createContact אשר:
    • אינה מקבלת פרמטרים
    • מחזירה מצביע למבנה Contact
    • משתמשת ב־malloc() כדי להקצות באופן דינמי זיכרון למבנה Contact אחד
    • בודקת אם הקצאת הזיכרון הצליחה:
      • אם ההקצאה נכשלת (מחזירה NULL), מדפיסה Memory allocation failed ומחזירה NULL
      • אם ההקצאה מצליחה, מדפיסה Contact created successfully
    • מאתחלת את כל איברי המבנה לערכי ברירת המחדל באמצעות אופרטור החץ:
      • מגדירה את name כמחרוזת ריקה באמצעות contactPtr->name[0] = '\0';
      • מגדירה את phone כמחרוזת ריקה באמצעות contactPtr->phone[0] = '\0';
      • מגדירה את email כמחרוזת ריקה באמצעות contactPtr->email[0] = '\0';
      • מגדירה את age לערך 0 באמצעות contactPtr->age = 0;
    • מחזירה את המצביע לאיש הקשר החדש שנוצר
  3. בפונקציה הראשית:
    • מצהירה על מצביע למבנה Contact בשם newContact
    • קוראת לפונקציה createContact ומשייכת את המצביע המוחזר ל־newContact
    • בודקת אם יצירת איש הקשר הצליחה:
      • אם newContact הוא NULL, מדפיסה Failed to create contact ומסיימת את התוכנית
      • אם הפעולה הצליחה, מדפיסה Contact initialized with default values
    • מציגה את פרטי איש הקשר שאותחל באמצעות אופרטור החץ, בפורמט המדויק הבא:
      • Default Contact Values:
      • Name: [name] (יהיה ריק)
      • Phone: [phone] (יהיה ריק)
      • Email: [email] (יהיה ריק)
      • Age: [age] (יהיה 0)
    • משחררת את הזיכרון שהוקצה באופן דינמי באמצעות free(newContact)
    • מדפיסה Memory freed successfully

האתגר הזה מציג את המושג פונקציות מפעל — פונקציות שיוצרות ומחזירות מצביעים למבנים שהוקצו באופן דינמי. תתרגל הקצאת זיכרון דינמית, בדיקת שגיאות תקינה, אתחול מבנים באמצעות מצביעים וניקוי זיכרון.

נסו בעצמכם

#include <stdio.h>
#include <string.h>

// TODO: Define the Contact struct here
struct Contact {
    char name[50];
    char phone[20];
    char email[40];
    int age;
};

int main() {
    // TODO: Create a Contact variable named person
    struct Contact person;
    
    // Read input values
    scanf("%s", person.name);
    scanf("%s", person.phone);
    scanf("%s", person.email);
    scanf("%d", &person.age);
    
    // TODO: Write your validation and output code below
    if (person.age < 0 || person.age > 120) {
        printf("Invalid age");
        return 0;
    }
    
    if (strlen(person.phone) < 10) {
        printf("Invalid phone number");
        return 0;
    }
    
    printf("Contact Information:\n");
    printf("Name: %s\n", person.name);
    printf("Phone: %s\n", person.phone);
    printf("Email: %s\n", person.email);
    printf("Age: %d\n", person.age);
    
    printf("Name length: %lu\n", strlen(person.name));
    
    if (person.age >= 0 && person.age <= 17) {
        printf("Category: Minor");
    } else if (person.age >= 18 && person.age <= 64) {
        printf("Category: Adult");
    } else {
        printf("Category: Senior");
    }
    
    return 0;
}

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר C אונליין