Funktion zum Befüllen eines Kontakts
Teil des Abschnitts Logic & Flow der C-Journey von Coddy — Lektion 52 von 63.
Aufgabe
EinfachAufbauend auf Ihrer Funktion zur Kontakterstellung aus der vorherigen Lektion sollen Sie eine Funktion erstellen, die einen Kontakt mit Benutzereingaben füllt. Ihr Programm sollte:
- Dieselbe
Contact-Strukturdefinition aus den vorherigen Lektionen mit folgenden Elementen verwenden:- Ein Zeichen-Array
namemit der Größe 50 - Ein Zeichen-Array
phonemit der Größe 20 - Ein Zeichen-Array
emailmit der Größe 40 - Eine Ganzzahl
age
- Ein Zeichen-Array
- Dieselbe
createContact-Funktion aus der vorherigen Lektion verwenden, die:- Dynamisch Speicher für eine
Contact-Struktur reserviert - Alle Elemente auf Standardwerte initialisiert
- Einen Pointer auf den Kontakt zurückgibt
- Dynamisch Speicher für eine
- Schreiben Sie eine Funktion namens
populateContact, die:- Einen Pointer auf eine
Contact-Struktur als Parameter entgegennimmt - Nichts zurückgibt (void)
- Den Benutzer zur Eingabe auffordert und die folgenden Daten in genau dieser Reihenfolge einliest:
- Gibt
Enter name:aus und liest einen String in das Namensfeld mitscanf("%s", contactPtr->name)ein - Gibt
Enter phone:aus und liest einen String in das Telefonfeld mitscanf("%s", contactPtr->phone)ein - Gibt
Enter email:aus und liest einen String in das E-Mail-Feld mitscanf("%s", contactPtr->email)ein - Gibt
Enter age:aus und liest eine Ganzzahl in das Altersfeld mitscanf("%d", &contactPtr->age)ein
- Gibt
- Nach dem Einlesen aller Eingaben die Daten validiert:
- Wenn das Alter kleiner als 0 oder größer als 120 ist, wird
Invalid age enteredausgegeben - Wenn die Länge der Telefonnummer weniger als 10 Zeichen beträgt (verwenden Sie
strlen()), wirdInvalid phone numberausgegeben - Wenn alle Validierungen bestanden sind, wird
Contact populated successfullyausgegeben
- Wenn das Alter kleiner als 0 oder größer als 120 ist, wird
- Einen Pointer auf eine
- In der main-Funktion:
- Erstellen Sie einen Kontakt mit der Funktion
createContact - Überprüfen Sie, ob die Kontakterstellung erfolgreich war
- Rufen Sie die Funktion
populateContactauf, um die Kontaktdaten auszufüllen - Zeigen Sie nach dem Ausfüllen die Kontaktinformationen unter Verwendung des Pfeil-Operators in genau diesem Format an:
Contact Information:Name: [name]Phone: [phone]Email: [email]Age: [age]
- Geben Sie den dynamisch reservierten Speicher frei
- Geben Sie
Contact deleted successfullyaus
- Erstellen Sie einen Kontakt mit der Funktion
Diese Herausforderung zeigt, wie man Funktionen erstellt, die Strukturdaten über Pointer modifizieren. Die Funktion populateContact erhält einen Pointer auf den Kontakt und verwendet den Pfeil-Operator, um die Elemente der ursprünglichen Struktur direkt zu ändern. Sie üben den Umgang mit Benutzereingaben, die Datenvalidierung und die Arbeit mit dynamisch reservierten Strukturen über Funktionsparameter.
Probier es selbst
#include <stdio.h>
#include <stdlib.h>
struct Contact {
char name[50];
char phone[20];
char email[40];
int age;
};
struct Contact* createContact() {
struct Contact* contactPtr = (struct Contact*)malloc(sizeof(struct Contact));
if (contactPtr == NULL) {
printf("Memory allocation failed\n");
return NULL;
}
printf("Contact created successfully\n");
contactPtr->name[0] = '\0';
contactPtr->phone[0] = '\0';
contactPtr->email[0] = '\0';
contactPtr->age = 0;
return contactPtr;
}
int main() {
struct Contact* newContact;
newContact = createContact();
if (newContact == NULL) {
printf("Failed to create contact\n");
return 1;
}
printf("Contact initialized with default values\n");
printf("Default Contact Values:\n");
printf("Name: %s\n", newContact->name);
printf("Phone: %s\n", newContact->phone);
printf("Email: %s\n", newContact->email);
printf("Age: %d\n", newContact->age);
free(newContact);
printf("Memory freed successfully\n");
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