[C] Probleme mit Ausgabe von Strukturen.

papsti7

Lt. Junior Grade
Registriert
Feb. 2014
Beiträge
304
Hallo ich habe versucht ein Programm zu schreiben bei dem man Daten von der Familie angibt ,diese wieder ausgeben und in eine .txt datei gespeichert werden. Derzeit stecke ich bei der Ausgabe, weil alles umgewandelt wurde in (glaube ich ) ASCII zeichen und nicht weiß wie ich diese wieder zurückwandle.
Code:
#include<stdio.h>
#include<stdlib.h>



struct bday
{
    int day,month,year;
}date;

struct familie
{
    char vorname[20];
    char nachname[20];
    struct bday date;
};

struct familie daten_abfragen(int anzahl);





int main()
{

    char num[20];
    int numb,z;
    struct familie daten[10];/*Hier würde ich gern mit malloc arbeiten, damit ich nicht die Grenz schon festlegen muss.*/
    printf("Geben Sie die Daten Ihrer engen Familie an!\n");
    printf("Wieviele Mitglieder möchten Sie eintragen?(MAX 10)");
    numb=atoi(gets(num));
    printf("Sie wollen %i Mitglieder angeben.\n",numb);

        daten_abfragen(numb);

    printf("\n\nHier die Daten Ihrer Familie:\n");
    for(z=0;z<numb;z++)
    {
        printf("%s %s,geboren am %i.%i.%i.\n",daten[z].vorname,daten[z].nachname,daten[z].date.day,daten[z].date.month,daten[z].date.year);
    }


}

struct familie daten_abfragen(int anzahl)
{
    struct familie daten;
    char input[20];
    int i;
for(i=0;i<anzahl;i++)
{
     printf("%i.\n",(i+1));
        printf("Vorname:");
        gets(daten.vorname);
        printf("Nachname:");
        gets(daten.nachname);
        printf("Geburtsdatum:");
        printf("Tag:");
        daten.date.day=atoi(gets(input));
        printf("Monat:");
        daten.date.month=atoi(gets(input));
        printf("Jahr:");
        daten.date.year=atoi(gets(input));
}


return daten;
}

Des weitere habe ich ein Problem mit dem Speicher, denn ich will eigentlich mit malloc und sizeof arbeiten aber kann es nicht richtig anwenden. Vielleicht könnte mir da auch wer weriterhelfen. Dort wo der Kommentar im Code steht.

PS: bitte keine kommentare zu gets() , ich weiß, dass es unsicher ist aber es war einfach kürzer und nur zu übungszwecken im Bereich Struktur. Danke.

Bei weiteren Infos einfach fragen. Danke schon mal.

EDIT: Achja das Ergebnis sieht dann ca so aus.

cmd.png
 
Zuletzt bearbeitet:
Zu deinem ersten Problem: Die Ausgabe sieht so komisch aus, weil in der Variable daten an dieser Stelle nicht die Daten drinstehen, die du eingegeben hast. Die Funktion daten_abfragen returnt zwar einen Wert vom Typ familie, der wird aber nirgendwo mehr benutzt. In das Array daten, das du in main deklarierst, wird nie etwas eingetragen, deswegen gibt printf das aus, was da zufällig im Speicher steht - und das sieht nun mal eher nach Müll aus :)

Zu Punkt 2: Du kannst die Variable daten deklarieren und initialisieren als:
Code:
struct familie * daten = (struct familie *) malloc(10 * sizeof(struct familie *));
Dadurch wird genug Speicher für - in diesem Fall - 10 Einträge reserviert. Falls du nachträglich doch mehr eintragen möchtest, musst du dann realloc() verwenden, sonst gibt's einen Überlauf.
 
ah ok und wie genau setzte ich das um das ich die daten der eingabe in die ausgabe bringe?
 
Zurück
Oben