Menu
Coddy logo textTech

פונקציה למילוי פרטי איש קשר

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

challenge icon

אתגר

קל

בהמשך לפונקציה ליצירת איש קשר מהשיעור הקודם, צרו פונקציה שממלאת פרטי איש קשר באמצעות קלט מהמשתמש. התוכנית שלכם צריכה:

  1. להשתמש באותה הגדרת struct בשם Contact מהשיעורים הקודמים, עם השדות:
    • מערך תווים בשם name בגודל 50
    • מערך תווים בשם phone בגודל 20
    • מערך תווים בשם email בגודל 40
    • מספר שלם בשם age
  2. להשתמש באותה פונקציה createContact מהשיעור הקודם, אשר:
    • מקצה באופן דינמי זיכרון עבור struct מסוג Contact
    • מאתחלת את כל השדות לערכי ברירת המחדל
    • מחזירה מצביע לאיש הקשר
  3. לכתוב פונקציה בשם 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
  4. בפונקציה הראשית:
    • ליצור איש קשר באמצעות הפונקציה 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;
}

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

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