Funktion zum Befüllen eines Kontakts
Teil des Abschnitts Logik & Ablauf der C-Journey von Coddy. Lektion 52 von 63.
Aufgabe
EinfachAufbauend auf der Kontakt-Erstellungsfunktion aus der vorherigen Lektion erstellst du eine Funktion, die einen Kontakt mit Benutzereingaben füllt. Dein Programm sollte:
- Dieselbe
Contact-Struct-Definition aus den vorherigen Lektionen mit den 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
- Dieselbe Funktion
createContactaus der vorherigen Lektion verwenden, aber ihreprintf-Zeilen entfernen, sodass sie nicht mehrContact created successfullyausgibt. Sie soll weiterhin:- Speicher für eine
Contact-Struct dynamisch reservieren - Alle Mitglieder mit Standardwerten initialisieren
- Einen Zeiger auf den Kontakt zurückgeben
- Speicher für eine
- Eine Funktion namens
populateContactschreiben, die:- Einen Zeiger auf eine
Contact-Struct als Parameter entgegennimmt - Nichts zurückgibt (void)
- Den Benutzer zur Eingabe auffordert und die folgenden Daten in genau dieser Reihenfolge einliest:
Enter name:ausgibt und mitscanf("%s", contactPtr->name)eine Zeichenfolge in das Namensfeld einliestEnter phone:ausgibt und mitscanf("%s", contactPtr->phone)eine Zeichenfolge in das Telefonfeld einliestEnter email:ausgibt und mitscanf("%s", contactPtr->email)eine Zeichenfolge in das E-Mail-Feld einliestEnter age:ausgibt und mitscanf("%d", &contactPtr->age)eine Ganzzahl in das Altersfeld einliest
- Nach dem Einlesen aller Eingaben die Daten überprüft:
- Wenn das Alter kleiner als 0 oder größer als 120 ist,
Invalid age enteredausgibt - Wenn die Telefonnummer weniger als 10 Zeichen lang ist (
strlen()verwenden),Invalid phone numberausgibt - Wenn alle Prüfungen bestanden werden,
Contact populated successfullyausgibt
- Wenn das Alter kleiner als 0 oder größer als 120 ist,
- Einen Zeiger auf eine
- In der Hauptfunktion:
- Einen Kontakt mit der Funktion
createContacterstellen - Überprüfen, ob der Kontakt erfolgreich erstellt wurde
- Die Funktion
populateContactaufrufen, um die Kontaktdaten einzutragen - Nach dem Ausfüllen die Kontaktinformationen mit dem Pfeiloperator in genau diesem Format anzeigen:
Contact Information:Name: [name]Phone: [phone]Email: [email]Age: [age]
- Den dynamisch reservierten Speicher freigeben
Contact deleted successfullyausgeben
- Einen Kontakt mit der Funktion
Diese Aufgabe zeigt, wie du Funktionen erstellst, die Struct-Daten über Zeiger verändern. Die Funktion populateContact erhält einen Zeiger auf den Kontakt und verwendet den Pfeiloperator, um die Mitglieder der ursprünglichen Struct direkt zu verändern. Du übst den Umgang mit Benutzereingaben, die Datenvalidierung und die Arbeit mit dynamisch reservierten Structs ü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 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