Funktion zum Erstellen eines Kontakts
Teil des Abschnitts Logic & Flow der C-Journey von Coddy — Lektion 51 von 63.
Aufgabe
EinfachAufbauend auf Ihrer Contact-Struktur aus der vorherigen Lektion, erstellen Sie eine Funktion, die dynamisch Speicher für einen neuen Kontakt reserviert. Ihr Programm sollte:
- Verwenden Sie dieselbe
Contact-Strukturdefinition aus der vorherigen Lektion mit den folgenden Elementen:- Ein Zeichen-Array
nameder Größe 50 - Ein Zeichen-Array
phoneder Größe 20 - Ein Zeichen-Array
emailder Größe 40 - Ein Integer
age
- Ein Zeichen-Array
- Schreiben Sie eine Funktion namens
createContact, die:- Keine Parameter entgegennimmt
- Einen Pointer auf eine
Contact-Struktur zurückgibt malloc()verwendet, um dynamisch Speicher für eineContact-Struktur zu reservieren- Prüft, ob die Speicherreservierung erfolgreich war:
- Wenn die Reservierung fehlschlägt (NULL zurückgibt),
Memory allocation failedausgibt und NULL zurückgibt - Wenn die Reservierung erfolgreich ist,
Contact created successfullyausgibt
- Wenn die Reservierung fehlschlägt (NULL zurückgibt),
- Alle Struktur-Elemente mit dem Pfeil-Operator auf Standardwerte initialisiert:
- Setzt
namemitcontactPtr->name[0] = '\0';auf einen leeren String - Setzt
phonemitcontactPtr->phone[0] = '\0';auf einen leeren String - Setzt
emailmitcontactPtr->email[0] = '\0';auf einen leeren String - Setzt
agemitcontactPtr->age = 0;auf 0
- Setzt
- Den Pointer auf den neu erstellten Kontakt zurückgibt
- In der main-Funktion:
- Deklarieren Sie einen Pointer auf eine
Contact-Struktur namensnewContact - Rufen Sie die Funktion
createContactauf und weisen Sie den zurückgegebenen PointernewContactzu - Prüfen Sie, ob die Erstellung des Kontakts erfolgreich war:
- Wenn
newContactNULL ist, geben SieFailed to create contactaus und beenden Sie das Programm - Wenn erfolgreich, geben Sie
Contact initialized with default valuesaus
- Wenn
- Zeigen Sie die initialisierten Kontaktinformationen mit dem Pfeil-Operator in genau diesem Format an:
Default Contact Values:Name: [name](wird leer sein)Phone: [phone](wird leer sein)Email: [email](wird leer sein)Age: [age](wird 0 sein)
- Geben Sie den dynamisch reservierten Speicher mit
free(newContact)frei - Geben Sie
Memory freed successfullyaus
- Deklarieren Sie einen Pointer auf eine
Diese Herausforderung führt das Konzept der Factory-Funktionen ein – Funktionen, die Pointer auf dynamisch reservierte Strukturen erstellen und zurückgeben. Sie werden die dynamische Speicherreservierung, ordnungsgemäße Fehlerprüfung, Strukturinitialisierung über Pointer und die Speicherbereinigung üben.
Probier es selbst
#include <stdio.h>
#include <string.h>
// TODO: Define the Contact struct here
struct Contact {
char name[50];
char phone[20];
char email[40];
int age;
};
int main() {
// TODO: Create a Contact variable named person
struct Contact person;
// Read input values
scanf("%s", person.name);
scanf("%s", person.phone);
scanf("%s", person.email);
scanf("%d", &person.age);
// TODO: Write your validation and output code below
if (person.age < 0 || person.age > 120) {
printf("Invalid age");
return 0;
}
if (strlen(person.phone) < 10) {
printf("Invalid phone number");
return 0;
}
printf("Contact Information:\n");
printf("Name: %s\n", person.name);
printf("Phone: %s\n", person.phone);
printf("Email: %s\n", person.email);
printf("Age: %d\n", person.age);
printf("Name length: %lu\n", strlen(person.name));
if (person.age >= 0 && person.age <= 17) {
printf("Category: Minor");
} else if (person.age >= 18 && person.age <= 64) {
printf("Category: Adult");
} else {
printf("Category: Senior");
}
return 0;
}Alle Lektionen in Logic & Flow
1Zeiger-Grundlagen
Was ist ein Zeiger?Zeiger deklarierenDer Adressoperator (&)Der Dereferenzierungsoperator (*)NULL-ZeigerZusammenfassung: Zeiger-Grundlagen4Projekt: Einfaches Text-Tool
ProjektübersichtZeichen zählen2Pointer und Arrays
Array-Namen als PointerArray-Elemente - PointerPointer-ArithmetikPointer vergleichenWiederholung: Array-Durchlauf mit Pointern5Zeiger und Funktionen
Wertübergabe (Pass-by-Value)Zeiger an Funktionen übergebenVariablen über Zeiger ändernEin klassisches Beispiel: SwapArrays an Funktionen übergebenZusammenfassung: Zeiger als Funktionsargumente8Structs und Zeiger
Zeiger auf StructsDer Pfeiloperator (->)Structs per Wert übergebenÜbergabe von Struct-ZeigernDynamische Allokation von StructsZusammenfassung: Struct ändern - Ptr11Finale Wiederholungsaufgaben
Wiederholung: Dynamische String-KonkatenationWiederholung: Array von StructsWiederholung: Wortfrequenz-Zähler3Character-Arrays und Strings
Strings als char-ArraysDer Null-TerminatorString-Eingabe mit scanfVerwendung von strlen()Verwendung von strcpy()Verwendung von strcat()Verwendung von strcmp()Zusammenfassung: Grundlegende String-Funktionen6Speicherverwaltung
Stack vs. Heap SpeicherDynamische Allokation - malloc()Verwendung von sizeof() für die AllokationÜberprüfung auf AllokationsfehlerSpeicher freigeben mit free()Allokation mit calloc()Rückblick: Dynamische Arrays9Projekt: Einfache Kontakteingabe
Projekt: Kontakt-Struct definierenFunktion zum Erstellen eines Kontakts