Hilfe bei Datenstruktur

_BlueScreen

Grünschnabel
Als Hausaufgabe bekamen wir folge Aufgabe:

1.Problemstellung
Für verschiedene Zwecke sollen Adressen eingelesen werden. Eine Datenstruktur wurde dafür bereits definiert:
typedef struct {
char *Name; char *VName; char *Adresse; unsigned int PLZ; char *Ort;
}
adresse;

adresse *Adressen[MENGE];

2. Aufgabe
Es ist eine Funktion getAdr mit folgenden Anforderungen zu schreiben:
- Die Funktion liest eine Adresse von Tastatur ein und speichert sie in der Datenstruktur.
- Der Zeiger auf den Speicherbereich der neu erstellten Adresse wird zurückgegeben.
- Sofern für Name nicht eingegeben wurde, wird kein Speicher angefordert und NULL zurückgegeben.
- Eine Anwendung der Funktion soll wie folgt möglich sein:
:
Adressen[215] = getAdr();
:

3. Zusatzaufgabe
Erstellen Sie auch weitere Funktionen,
- um den Speicher einer Adresse wieder sauber freizugeben.
- um eine Adresse anzuzeigen
- um die Adressen nach Name zu sortieren
- um nach bestimmten Name oder Fragmenten zu suchen.

Unser Lehrer erklärte uns die vorgehensweise und Art, wie man diese Aufgabe anpacken sollte nicht, und darum hat niemand in meiner Klasse eine Ahnung, wie der Code aussehen sollte :(

Hoffentlich kann mir jemand einen Ansatzpunkt geben und die Logik und Codestruktur erklären sodass ich es auch verstehe.

Danke im voraus :)

_BlueScreen
 
Hallo so wie du den Thread gestaltet hast sieht es aus als wenn "Wir" die Hausaufgaben machen sollen. Was genau verstehst du nicht ? Wo ist der Haken, wo ist dein Code also den ihr schon vorgegeben habt wo ist genau das Problem ? Verstehst du was gegeben ist also die Struktur und die Anweisung danach ?
Weißt du wie man eine Funktion schreibt also wie sie grob angeordnet ist usw. alles Fragen die uns interessieren wenn wir dir helfen sollen.
Das ist hier kein Hausaufgabenservice also bitte etwas genauer werdne wo es hakt und auch selbst im Internet nachlesen oder sonstwo worum es geht ;)

mfg
 
Also bis ich habe bis etz eine erste Version des Programm probiert zu schreiben, doch es funktioniert noch nicht. Der Compilier bringt mir einen Error "cannot convert adresse to adresse* in assignment"..
Seht jemand gerade wo ich den Fehler gemacht habe, und ob noch ein Paar Fehler darin enthalten sind.

Unter steht der Code
MFG
_BlueScreen

// Copyright 2008 CH
/*******************************************************************************
* Include Files
*******************************************************************************/
#include <stdlib.h> /* Funktionsbibliotek: Hilfsfunktionen */
#include <stdio.h> /* Funtkionsbibliotek: Standard Ein- Ausgabe */
/******************************************************************************/
/* Struktur für Personalien */
typedef struct {
char *Name; char *VName; char *Adresse; unsigned int PLZ; char *Ort;
}
adresse; // Globale Struktur für Personalien eines Persons
/*******************************************************************************
* Funktionsdeklaration
*******************************************************************************/
void intro(); /* Funktion für Textausgabe am Anfang des Programms */
void line (); /* Funktion welches eine Linie macht */
adresse getAdr(); /* Datentyp von der Struktur */
/*******************************************************************************
* Konstanten
*******************************************************************************/
#define MENGE 300 // Grösse des Array
/*******************************************************************************
*********************************HAUPTPROGRAMM***********************
*******************************************************************************/
int main(void) {


/* Intro */
intro(); // Funktion für Intro-Ausgabe

/* Variablen */
adresse *Adressen[MENGE]; // Deklaration des Arrays
/* Verarbeitung */

Adressen[215] = getAdr(); // Aufruf der Funktion

system ("PAUSE"); /* Nur während der Entwicklungsphase, später löschen! */
return (0) ;
}
/*----------------------------------------------------------------------------*/
/*******************************************************************************
********************************************************************************
* Funktion: getAdr
*
* Source: getAdr.c
*
* Call:
*
* Autor: JaBa
*
* Version: 1.0
*
* Datum: 27.04.2008
*
* Entwicklungsablauf:
* (Version, Datum, Autor, Entwicklungsschritt, Zeit)
* (1.0, .2008, JaBa , Codierung der Funktion, min)
********************************************************************************
*
* Verwendungszweck:
* C-Schulung
*
* Beschreibung:
* Liest eine Adresse von Tastatur ein und speichert sie in einer Datenstruktur
*
* Precondition:
* Selbstdefinierter Datenstruktur muss vorhanden sein
*
* Postcondition:
* WENN für Name nichts eingegeben
* DANN
* KEIN Speicher angefordert, NULL als RETURN
* ELSE
* Zeiger auf den Speicherbereich als RETURN
*
* Benötigte Unterprogramme:
*
*
* Parameter: (I: Input, O: Output, U: Update, R: Return)
* Name i/0/u/r Format Beschreibung
* Ptr r adresse Zeiger auf neu erstellten Adresses
*
* Copyright (c) 2008 by _BlueScreen, CH
********************************************************************************
*******************************************************************************/
adresse *getAdr(){


adresse *Ptr = &Adressen; // Pointer auf Array setzen

/*if( scanf("%199[^\n]%c", Ptr->Name) == 1){ // Konnte Zuweisung gemacht werden
printf("sdfdsf");
*/
if(scanf("%50[^\n]%c", Ptr->Name) == 1){
scanf("%c %c %d %c", Ptr->VName, Ptr->Adresse, Ptr->PLZ, Ptr->Ort);
}
else{
Ptr = NULL; // Kein Speicher anfordern und NULL als RETURN
}
return(*Ptr);
}
/*----------------------------------------------------------------------------*/

void intro (){ // Funktionsname
printf("-------------------------------------------------------------------"
"------------\nTextspeicher\n------------------------------------------------"
"-------------------------------\n");
}
void line (){ // Funktionsname (Parameterdefinition)
printf("\n-------------------------------------------------------------------"
"------------\n\n");
}
 
Hi ich habs mal versucht
aber leider haut es nicht ganz hin, habe noch nie mit malloc zu tun gehabt, vllt. weis einer von euch wie man in C richtig speicher alloziert.

C:
adresse* getAdr()
{
adresse *Ptr = malloc(sizeof(adresse)); // Pointer setzen
if (scanf("%s", &Ptr->Name) == 1)
{
  scanf("%s %s %d %s", &Ptr->VName, &Ptr->Adresse, &Ptr->PLZ, &Ptr->Ort);
}
else{
Ptr = NULL; // Kein Speicher anfordern und NULL als RETURN
}
return Ptr;
}

Die Ausgabe sieht dann so aus:
C:
// Testing
printf(" Name: %s\n Nachname: %s\n Strasse: %s\n PLZ: %d\n Ort: %s\n ", &Adressen[215]->Name,
                                                                        &Adressen[215]->VName,
                                                                        &Adressen[215]->Adresse,
                                                                        Adressen[215]->PLZ,
                                                                        &Adressen[215]->Ort);

Ort und PLZ werdne richtig ausgegeben... die anderen 3 ersten Sachen nicht. Leider muss ich los werd nacher nochmal dran forschen :)
 
Zurück