Step 8: Read and Validate the Contact Phone Number

Easy Section 2: Add Contact Module
Solve in Playground →

Problem Statement

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.

Input Format

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.

Output Format

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.

Constraints

ID must be positive. Name must fit in 49 characters. Phone length must be between 1 and 14 characters.

Sample Input

1
101
Alice Johnson
1234567890
0

Sample Output

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

Explanation

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.

Starter Code

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

Limits

  • Time Limit: 1s
  • Memory Limit: 256MB

Embedded C Programming

Updated: March 15, 2026
Intermediate

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