連絡先にデータを入力する関数
CoddyのCジャーニー「Logic & Flow」セクションの一部 — レッスン 52/63。
チャレンジ
簡単前回のレッスンの連絡先作成関数を基に、ユーザー入力を使用して連絡先にデータを入力する関数を作成します。プログラムは以下の要件を満たす必要があります:
- 前回のレッスンと同じ
Contact構造体の定義を使用します。メンバーは以下の通りです:- サイズ50の文字配列
name - サイズ20の文字配列
phone - サイズ40の文字配列
email - 整数型の
age
- サイズ50の文字配列
- 前回のレッスンと同じ
createContact関数を使用します。この関数は:Contact構造体のメモリを動的に割り当てます- すべてのメンバーをデフォルト値で初期化します
- 連絡先へのポインタを返します
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と表示します
- 年齢が0未満または120より大きい場合、
- 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;
}