Step 14: Display All Stored Contacts

Easy Section 3: Display Module
Solve in Playground →

Problem Statement

Complete the display_contacts() module by looping through the phonebook from index 0 to contact_count – 1 and printing every stored contact beneath the table header. Retain the empty-phonebook check and header introduced in Tasks 12 and 13. Do not modify the existing Add Contact module, menu router, or any earlier code. The display module should show ID, Name, and Phone for every stored record in insertion order.

Input Format

One or more complete Add Contact operations followed by the Display option 2 and finally 0 to exit.

Output Format

For a non-empty phonebook, print the header ID Name Phone followed by one line for each stored contact in insertion order using the format: [id] [name] [phone].

Constraints

Contacts are displayed in the same order in which they were stored. Only indices from 0 through contact_count - 1 may be displayed.

Sample Input

1
101
Alice Johnson
1234567890
1
102
Bob Smith
9876543210
2
0

Sample Output

Contact Book Ready.
Phonebook Capacity: 100
Contacts: 0
Menu:
Add
ID: 101
Valid ID
Name: Alice Johnson
Phone: 1234567890
Valid Phone
Contact Added
Menu:
Add
ID: 102
Valid ID
Name: Bob Smith
Phone: 9876543210
Valid Phone
Contact Added
Menu:
Display
ID Name Phone
101 Alice Johnson 1234567890
102 Bob Smith 9876543210
Menu:
Exit

Explanation

The display module now traverses the active portion of the global phonebook array. Because contact_count records the number of active contacts, the loop can safely display only valid entries and preserve their insertion order.

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() {
    if (contact_count >= 100) {
        printf("\nPhonebook Full");
        return;
    }

    int id;

    if (scanf("%d", &id) == 1) {
        printf("\nID: %d", id);

        if (id > 0) {
            printf("\nValid ID");

            {
                int duplicate = 0;

                for (int i = 0; i < contact_count; i++) {
                    if (phonebook[i].id == id) {
                        duplicate = 1;
                        break;
                    }
                }

                if (duplicate) {
                    printf("\nDuplicate ID");
                    return;
                }
            }

            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);

                {
                    char phone_input[100];

                    if (fgets(phone_input, sizeof(phone_input), stdin) != NULL) {
                        phone_input[
                            strcspn(phone_input, "\n")
                        ] = '\0';

                        printf("\nPhone: %s", phone_input);

                        if (strlen(phone_input) >= 1 &&
                            strlen(phone_input) <= 14) {
                            strcpy(phonebook[contact_count].phone, phone_input);
                            printf("\nValid Phone");

                            phonebook[contact_count].id = id;
                            contact_count++;

                            printf("\nContact Added");
                        } else {
                            printf("\nInvalid Phone");
                        }
                    }
                }
            }
        } else {
            printf("\nInvalid ID");
        }
    }
}

void display_contacts() {
    if (contact_count == 0) {
        printf("\nPhonebook Empty");
        return;
    }

    printf("\nID Name Phone");

    // Write your code here
}

void search_contact() {
}

void update_contact() {
}

void delete_contact() {
}

int main() {
    int choice;

    printf("Contact Book Ready.");
    printf("\nPhonebook Capacity: %d", 100);
    printf("\nContacts: %d", contact_count);

    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