Menu
Coddy logo textTech

連絡先にデータを入力する関数

CoddyのCジャーニー「Logic & Flow」セクションの一部 — レッスン 52/63。

challenge icon

チャレンジ

簡単

前回のレッスンの連絡先作成関数を基に、ユーザー入力を使用して連絡先にデータを入力する関数を作成します。プログラムは以下の要件を満たす必要があります:

  1. 前回のレッスンと同じ Contact 構造体の定義を使用します。メンバーは以下の通りです:
    • サイズ50の文字配列 name
    • サイズ20の文字配列 phone
    • サイズ40の文字配列 email
    • 整数型の age
  2. 前回のレッスンと同じ createContact 関数を使用します。この関数は:
    • Contact 構造体のメモリを動的に割り当てます
    • すべてのメンバーをデフォルト値で初期化します
    • 連絡先へのポインタを返します
  3. populateContact という名前の関数を作成します。この関数は:
    • 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. main 関数では:
    • createContact 関数を使用して連絡先を作成します
    • 連絡先の作成が成功したか確認します
    • populateContact 関数を呼び出して連絡先データを入力します
    • 入力後、アロー演算子を使用して以下の正確な形式で連絡先情報を表示します:
      • Contact Information:
      • Name: [name]
      • Phone: [phone]
      • Email: [email]
      • Age: [age]
    • 動的に割り当てられたメモリを解放します
    • Contact deleted successfully と表示します

このチャレンジでは、ポインタを介して構造体データを変更する関数の作成方法を学びます。populateContact 関数は連絡先へのポインタを受け取り、アロー演算子を使用して元の構造体のメンバーを直接変更します。ユーザー入力の処理、データの検証、および関数パラメータを介した動的に割り当てられた構造体の操作を練習します。

自分で試してみよう

#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;
}

Logic & Flowのすべてのレッスン