Extend the existing Add Contact workflow by reading the phone number after the name. Validate that the phone number contains between 1 and 14 characters so it fits safely in the phone field. Retain all previous ID and name behavior.
A menu choice of 1, a valid ID, a contact name on the next line, and a non-whitespace phone number on the following line.
Print ID: [id], Valid ID, Name: [name], Phone: [phone], and then Valid Phone for valid lengths or Invalid Phone for an empty or oversized phone value.
ID must be positive. Name must fit in 49 characters. Phone length must be between 1 and 14 characters.
1 101 Alice Johnson 1234567890 0
Contact Book Ready.
Phonebook Capacity: 100
Contacts: 0
Modules Ready.
Menu:
Add
ID: 101
Valid ID
Name: Alice Johnson
Phone: 1234567890
Valid Phone
Menu:
Exit
The phone field has a fixed capacity of 15 bytes including its terminating null character, so the stored phone string must not exceed 14 characters.
#include <stdio.h>
#include <string.h>
struct Contact {
int id;
char name[50];
char phone[15];
};
struct Contact phonebook[100];
int contact_count = 0;
void add_contact();
void display_contacts();
void search_contact();
void update_contact();
void delete_contact();
void add_contact() {
int id;
if (scanf("%d", &id) == 1) {
printf("\nID: %d", id);
if (id > 0) {
printf("\nValid ID");
getchar();
if (fgets(phonebook[contact_count].name,
sizeof(phonebook[contact_count].name), stdin) != NULL) {
phonebook[contact_count].name[
strcspn(phonebook[contact_count].name, "\n")
] = '\0';
printf("\nName: %s", phonebook[contact_count].name);
// Write your code here
}
} else {
printf("\nInvalid ID");
}
}
}
void display_contacts() {
}
void search_contact() {
}
void update_contact() {
}
void delete_contact() {
}
int main() {
int choice;
printf("Contact Book Ready.");
printf("\nPhonebook Capacity: %d", sizeof(phonebook)/sizeof(phonebook[0]));
printf("\nContacts: %d", contact_count);
printf("\nModules Ready.");
while (1) {
printf("\nMenu:");
if (scanf("%d", &choice) != 1) {
break;
}
switch (choice) {
case 1:
printf("\nAdd");
add_contact();
break;
case 2:
printf("\nDisplay");
display_contacts();
break;
case 3:
printf("\nSearch");
search_contact();
break;
case 4:
printf("\nUpdate");
update_contact();
break;
case 5:
printf("\nDelete");
delete_contact();
break;
case 0:
printf("\nExit");
return 0;
default:
printf("\nInvalid Choice");
break;
}
}
return 0;
}Embedded systems rely on efficient low-level programming to interact directly with hardware. In this course, you will learn how to write practical Embedded C programs used in real microcontroller-based systems. Rather than focusing only on theory, this course follows a practice-driven approach. Each lesson includes hands-on coding exercises that simulate real firmware development tasks used