Menu
CoddyTech

Funktion zum Anzeigen eines Kontakts

Teil des Abschnitts Logik & Ablauf der C-Journey von Coddy. Lektion 53 von 63.

challenge icon

Aufgabe

Einfach

Aufbauend auf deinem Kontaktverwaltungssystem aus den vorherigen Lektionen erstellst du eine Funktion, die Kontaktinformationen formatiert anzeigt. In dieser Lektion werden drei neue Zeichenkettenfunktionen vorgestellt, die du benötigst: fgets(), strcspn() und strchr(): Jede wird im Folgenden vor den Anforderungen erklärt.

Neue Funktionen in dieser Lektion:

  • fgets(buffer, size, stdin): liest eine Eingabezeile einschließlich Leerzeichen (anders als scanf, das bei Leerraumzeichen stoppt). Die Eingabe wird in buffer gespeichert, wobei höchstens size - 1 Zeichen gelesen werden. Außerdem wird am Ende das Zeilenumbruchzeichen '\n' gespeichert.
  • strcspn(str, "\n"): gibt den Index des ersten Vorkommens von '\n' in str zurück. Wird verwendet, um den von fgets zurückgelassenen Zeilenumbruch am Ende zu entfernen: str[strcspn(str, "\n")] = '\0';
  • strchr(str, ch): sucht in str nach dem Zeichen ch und gibt einen Zeiger auf dessen Position zurück oder NULL, falls es nicht gefunden wird.

Dein Programm sollte Folgendes tun:

  1. Dieselbe Contact-Strukturdefinition wie in den vorherigen Lektionen verwenden, mit den Elementen:
    • Ein Zeichenarray name mit der Größe 50
    • Ein Zeichenarray phone mit der Größe 20
    • Ein Zeichenarray email mit der Größe 40
    • Eine Ganzzahl age
  2. Dieselbe Funktion createContact wie in den vorherigen Lektionen verwenden, die:
    • Speicher für eine Contact-Struktur dynamisch reserviert
    • Alle Elemente mit Standardwerten initialisiert
    • Einen Zeiger auf den Kontakt zurückgibt
  3. Eine Funktion populateContact schreiben, die:
    • Einen Zeiger auf eine Contact-Struktur als Parameter entgegennimmt
    • fgets() verwendet, um jedes Zeichenkettenfeld (name, phone, email) einzulesen, sodass Namen mit Leerzeichen akzeptiert werden
    • strcspn() verwendet, um nach dem Einlesen den abschließenden Zeilenumbruch aus jedem Zeichenkettenfeld zu entfernen
    • scanf("%d", ...) verwendet, um das Ganzzahlfeld age einzulesen
    • Vor dem Einlesen jedes Feldes genau die entsprechende Eingabeaufforderung ohne nachfolgenden Zeilenumbruch ausgibt: Enter name: , Enter phone: , Enter email: , Enter age: (sodass === CONTACT DETAILS === in derselben Zeile auf Enter age: folgt)
    • Hinweis: Diese Version von populateContact enthält keine Längenprüfung für Telefonnummern: Füge sie nicht hinzu, da in den Testeingaben kurze Telefonnummern wie 555-1234 verwendet werden
  4. Eine Funktion namens displayContact schreiben, die:
    • Einen Zeiger auf eine konstante Contact-Struktur als Parameter entgegennimmt: const struct Contact *contactPtr
    • Nichts zurückgibt (void)
    • Die Kontaktinformationen genau in diesem Format ausgibt:
      • === CONTACT DETAILS ===
      • Name: [name]
      • Phone: [phone]
      • Email: [email]
      • Age: [age] years old
      • ========================
    • Nach der Anzeige der grundlegenden Informationen zusätzliche Details berechnet und ausgibt:
      • Die Länge des Namens mit strlen() berechnet und Folgendes ausgibt: Name length: [length] characters
      • Die Alterskategorie bestimmt und Folgendes ausgibt:
        • Wenn das Alter zwischen 0 und 12 liegt: Generation: Child
        • Wenn das Alter zwischen 13 und 19 liegt: Generation: Teenager
        • Wenn das Alter zwischen 20 und 39 liegt: Generation: Young Adult
        • Wenn das Alter zwischen 40 und 59 liegt: Generation: Middle-aged Adult
        • Wenn das Alter 60 oder höher ist: Generation: Senior
      • Mit strchr() prüft, ob die E-Mail-Adresse das Zeichen '@' enthält, und Folgendes ausgibt:
        • Wenn '@' gefunden wird: Email format: Valid
        • Wenn '@' nicht gefunden wird: Email format: Invalid
  5. In der Hauptfunktion:
    • Mit der Funktion createContact einen Kontakt erstellen
    • Prüfen, ob der Kontakt erfolgreich erstellt wurde
    • Die Funktion populateContact aufrufen, um die Kontaktdaten einzutragen
    • Die Funktion displayContact aufrufen, um die formatierten Kontaktinformationen anzuzeigen
    • Den dynamisch reservierten Speicher freigeben
    • Program completed successfully ausgeben

Diese Aufgabe zeigt, wie eine Anzeigefunktion erstellt wird, die einen Zeiger auf eine konstante Struktur entgegennimmt und so sicherstellt, dass die Funktion die ursprünglichen Daten nicht ändern kann. Du übst den Einsatz von fgets(), um Zeichenketten mit Leerzeichen einzulesen, von strcspn(), um abschließende Zeilenumbrüche zu entfernen, des Pfeiloperators, um über einen Zeiger auf Strukturelemente zuzugreifen, von strchr() zur Zeichensuche und von bedingter Logik zur Datenkategorisierung. Die Verwendung von const in der Parameterdeklaration ist eine gute Praxis, die versehentliche Änderungen der Kontaktdaten innerhalb der Anzeigefunktion verhindert.

Probier es selbst

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

Alle Lektionen in Logik & Ablauf

Übe selbstständig: Online-C-Compiler