Menu
CoddyTech

Fungsi untuk Menampilkan Kontak

Termasuk bagian Logika dan Alur dalam perjalanan C di Coddy. Pelajaran 53 dari 63.

challenge icon

Tantangan

Mudah

Dengan melanjutkan sistem pengelolaan kontak dari pelajaran sebelumnya, buat fungsi yang menampilkan informasi kontak dengan format tertentu. Pelajaran ini memperkenalkan tiga fungsi string baru yang kamu perlukan: fgets(), strcspn(), dan strchr(). Penjelasan setiap fungsi tersedia di bawah, sebelum persyaratannya.

Fungsi baru yang digunakan dalam pelajaran ini:

  • fgets(buffer, size, stdin): membaca satu baris input, termasuk spasi, tidak seperti scanf yang berhenti saat menemukan spasi. Fungsi ini menyimpan input ke dalam buffer, dengan membaca paling banyak size - 1 karakter. Fungsi ini juga menyimpan karakter baris baru '\n' di bagian akhir.
  • strcspn(str, "\n"): mengembalikan indeks kemunculan pertama '\n' dalam str. Fungsi ini digunakan untuk menghapus karakter baris baru di akhir yang ditinggalkan oleh fgets: str[strcspn(str, "\n")] = '\0';
  • strchr(str, ch): mencari karakter ch dalam str dan mengembalikan pointer ke lokasinya, atau NULL jika tidak ditemukan.

Programmu harus:

  1. Menggunakan definisi struct Contact yang sama seperti di pelajaran sebelumnya, dengan anggota:
    • Array karakter name berukuran 50
    • Array karakter phone berukuran 20
    • Array karakter email berukuran 40
    • Integer age
  2. Menggunakan fungsi createContact yang sama seperti di pelajaran sebelumnya, yang:
    • Mengalokasikan memori secara dinamis untuk struct Contact
    • Menginisialisasi semua anggota dengan nilai default
    • Mengembalikan pointer ke kontak
  3. Menulis fungsi populateContact yang:
    • Menerima pointer ke struct Contact sebagai parameternya
    • Menggunakan fgets() untuk membaca setiap field string (nama, telepon, email) agar nama yang mengandung spasi dapat diterima
    • Menggunakan strcspn() untuk menghapus karakter baris baru di akhir dari setiap field string setelah membacanya
    • Menggunakan scanf("%d", ...) untuk membaca field usia berupa integer
    • Sebelum membaca setiap field, mencetak prompt persis seperti berikut, tanpa karakter baris baru setelahnya: Enter name: , Enter phone: , Enter email: , Enter age: (sehingga === CONTACT DETAILS === muncul pada baris yang sama setelah Enter age: )
    • Catatan: Versi populateContact ini tidak mencakup validasi panjang nomor telepon. Jangan menambahkannya, karena input pengujian menggunakan nomor telepon pendek seperti 555-1234.
  4. Menulis fungsi bernama displayContact yang:
    • Menerima pointer konstan ke struct Contact sebagai parameternya: const struct Contact *contactPtr
    • Tidak mengembalikan apa pun (void)
    • Mencetak informasi kontak dengan format persis berikut:
      • === CONTACT DETAILS ===
      • Name: [name]
      • Phone: [phone]
      • Email: [email]
      • Age: [age] years old
      • ========================
    • Setelah menampilkan informasi dasar, menghitung dan menampilkan detail tambahan:
      • Menghitung panjang nama menggunakan strlen() dan mencetak: Name length: [length] characters
      • Menentukan kategori generasi berdasarkan usia dan mencetak:
        • Jika usia antara 0 dan 12: Generation: Child
        • Jika usia antara 13 dan 19: Generation: Teenager
        • Jika usia antara 20 dan 39: Generation: Young Adult
        • Jika usia antara 40 dan 59: Generation: Middle-aged Adult
        • Jika usia 60 atau lebih: Generation: Senior
      • Memeriksa apakah email berisi karakter '@' menggunakan strchr() dan mencetak:
        • Jika '@' ditemukan: Email format: Valid
        • Jika '@' tidak ditemukan: Email format: Invalid
  5. Di fungsi main:
    • Membuat kontak menggunakan fungsi createContact
    • Memeriksa apakah pembuatan kontak berhasil
    • Memanggil fungsi populateContact untuk mengisi data kontak
    • Memanggil fungsi displayContact untuk menampilkan informasi kontak dengan format yang ditentukan
    • Membebaskan memori yang dialokasikan secara dinamis
    • Mencetak Program completed successfully

Tantangan ini menunjukkan cara membuat fungsi tampilan yang menerima pointer konstan ke struct, sehingga fungsi tersebut tidak dapat mengubah data asli. Kamu akan berlatih menggunakan fgets() untuk membaca string yang berisi spasi, strcspn() untuk menghapus karakter baris baru di akhir, operator panah untuk mengakses anggota struct melalui pointer, strchr() untuk mencari karakter, dan logika percabangan untuk mengategorikan data. Penggunaan const dalam deklarasi parameter merupakan praktik yang baik untuk mencegah perubahan data kontak secara tidak sengaja di dalam fungsi tampilan.

Coba sendiri

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
    char name[50];
    char phone[20];
    char email[40];
    int age;
} Contact;

Contact* createContact() {
    Contact* contact = (Contact*)malloc(sizeof(Contact));
    if (contact == NULL) {
        return NULL;
    }
    
    strcpy(contact->name, "");
    strcpy(contact->phone, "");
    strcpy(contact->email, "");
    contact->age = 0;
    
    return contact;
}

void populateContact(Contact* contactPtr) {
    printf("Enter name: ");
    scanf("%s", contactPtr->name);
    
    printf("Enter phone: ");
    scanf("%s", contactPtr->phone);
    
    printf("Enter email: ");
    scanf("%s", contactPtr->email);
    
    printf("Enter age: ");
    scanf("%d", &contactPtr->age);
    
    if (contactPtr->age < 0 || contactPtr->age > 120) {
        printf("Invalid age entered\n");
    } else if (strlen(contactPtr->phone) < 10) {
        printf("Invalid phone number\n");
    } else {
        printf("Contact populated successfully\n");
    }
}

int main() {
    Contact* contact = createContact();
    
    if (contact == NULL) {
        return 1;
    }
    
    populateContact(contact);
    
    printf("Contact Information:\n");
    printf("Name: %s\n", contact->name);
    printf("Phone: %s\n", contact->phone);
    printf("Email: %s\n", contact->email);
    printf("Age: %d\n", contact->age);
    
    free(contact);
    printf("Contact deleted successfully\n");
    
    return 0;
}

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler C online