Funktion zum Erstellen eines Kontakts
Teil des Abschnitts Logik & Ablauf der C-Journey von Coddy. Lektion 51 von 63.
Aufgabe
EinfachAufbauend auf deiner Contact-Struktur aus der vorherigen Lektion erstellst du eine Funktion, die dynamisch Speicher für einen neuen Kontakt reserviert. Dein Programm sollte:
- Dieselbe
Contact-Strukturdefinition aus der vorherigen Lektion mit folgenden Mitgliedern verwenden:- Ein Zeichenarray
namemit der Größe 50 - Ein Zeichenarray
phonemit der Größe 20 - Ein Zeichenarray
emailmit der Größe 40 - Eine Ganzzahl
age
- Ein Zeichenarray
- Eine Funktion namens
createContactschreiben, die:- Keine Parameter entgegennimmt
- Einen Zeiger auf eine
Contact-Struktur zurückgibt malloc()verwendet, um dynamisch Speicher für eineContact-Struktur zu reservieren- Überprüft, ob die Speicherreservierung erfolgreich war:
- Wenn die Reservierung fehlschlägt (
NULLzurückgibt),Memory allocation failedausgibt undNULLzurückgibt - Wenn die Reservierung erfolgreich ist,
Contact created successfullyausgibt
- Wenn die Reservierung fehlschlägt (
- Alle Strukturmitglieder mithilfe des Pfeiloperators auf Standardwerte initialisiert:
namemithilfe voncontactPtr->name[0] = '\0';auf eine leere Zeichenkette setztphonemithilfe voncontactPtr->phone[0] = '\0';auf eine leere Zeichenkette setztemailmithilfe voncontactPtr->email[0] = '\0';auf eine leere Zeichenkette setztagemithilfe voncontactPtr->age = 0;auf 0 setzt
- Den Zeiger auf den neu erstellten Kontakt zurückgibt
- In der Funktion
main:- Einen Zeiger auf eine
Contact-Struktur namensnewContactdeklarieren - Die Funktion
createContactaufrufen und den zurückgegebenen ZeigernewContactzuweisen - Überprüfen, ob die Kontakterstellung erfolgreich war:
- Wenn
newContactNULList,Failed to create contactausgeben und das Programm beenden - Bei Erfolg
Contact initialized with default valuesausgeben
- Wenn
- Die initialisierten Kontaktinformationen mithilfe des Pfeiloperators in genau diesem Format anzeigen:
Default Contact Values:Name: [name](wird leer sein)Phone: [phone](wird leer sein)Email: [email](wird leer sein)Age: [age](wird 0 sein)
- Den dynamisch reservierten Speicher mithilfe von
free(newContact)freigeben Memory freed successfullyausgeben
- Einen Zeiger auf eine
Diese Herausforderung führt das Konzept von Fabrikfunktionen ein – Funktionen, die Zeiger auf dynamisch reservierte Strukturen erstellen und zurückgeben. Du übst dabei die dynamische Speicherreservierung, die korrekte Fehlerüberprüfung, die Initialisierung von Strukturen über Zeiger und die Speicherbereinigung.
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 Logik & Ablauf
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Übe selbstständig: Online-C-Compiler