Hello guys, im new to c and structures and try to build or atleast fix my programm. I want build something like a digital phonebook. I also want to show my structure attributes after writing them. With my first code is working so far but if i want to show my "contact" there are just some wrong values. I also tried to create a second code which is also not working. Do i need the "strcpy"? i cant find stuff about creating Structure elements recursively.
Maybe someone can give me a quick idea or help me with syntax.

thx so far :)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Telefonbucheintrag
    {
    char Name[15];
    char Vorname[15];
    char Straße[20];
    int Hausnummer[4];
    int Telefonnummer[30];
    };

int main(void) {
int x1;
printf("Wie viele Kontakte möchten Sie in das Telefonbuch eintragen?\n");
scanf("%d", &x1);
struct Telefonbucheintrag erzeuger[x1];

int i;
int x2=1;
for(i=0; i<x1; i++)
{
    printf("Kontaktnummer %d:\n",x2);
    printf("Geben Sie ihren Namen ein:\n");
    scanf("%s",erzeuger[i].Name );
    printf("Geben Sie ihren Vorname ein:\n");
    scanf("%s",erzeuger[i].Vorname );
    printf("Geben Sie ihre Straße ein:\n");
    scanf("%s",erzeuger[i].Straße );
    printf("Geben Sie ihre Hausnummer ein:\n");
    scanf("%d",&erzeuger[i].Hausnummer );
    printf("Geben Sie ihre Telefonnummer ein:\n");
    scanf("%d",&erzeuger[i].Telefonnummer );
    x2++;
};

printf("Möchten Sie alle Kontakte anzeigen?\n");

    int ix;
    int x3=1;
    for(ix=0; ix<x1; ix++)
{
    printf("Kontaktnummer %d:\n",x3);
    printf("Name:%s\n",erzeuger[i].Name);
    printf("Vorname:%s\n",erzeuger[i].Vorname);
    printf("Straße:%s\n",erzeuger[i].Straße);
    printf("Hausnummer:%d\n", erzeuger[i].Hausnummer);
    printf("Telefonnummer:%d\n", erzeuger[i].Telefonnummer);
    x3++;
}

    return 0;
};

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Telefonbucheintrag
    {
    char Name[15];
    char Vorname[15];
    char Straße[20];
    int Hausnummer[4];
    int Telefonnummer[30];
    };

int main(void) {
int x1;
printf("Wie viele Kontakte möchten Sie in das Telefonbuch eintragen?\n");
scanf("%d", &x1);
struct Telefonbucheintrag erzeuger[x1];

int i;
int x2=1;
for(i=0; i<x1; i++)
{
    printf("Kontaktnummer %d:\n",x2);
    printf("Geben Sie ihren Namen ein:\n");
    scanf("%s",erzeuger[i].Name );
    printf("Geben Sie ihren Vorname ein:\n");
    scanf("%s",erzeuger[i].Vorname );
    printf("Geben Sie ihre Straße ein:\n");
    scanf("%s",erzeuger[i].Straße );
    printf("Geben Sie ihre Hausnummer ein:\n");
    scanf("%d",&erzeuger[i].Hausnummer );
    printf("Geben Sie ihre Telefonnummer ein:\n");
    scanf("%d",&erzeuger[i].Telefonnummer );
    x2++;
};

printf("Möchten Sie alle Kontakte anzeigen?\n");

    int ix;
    int x3=1;
    for(ix=0; ix<x1; ix++)
{
    printf("Kontaktnummer %d:\n",x3);
    printf("Name:%s\n",erzeuger[i].Name);
    printf("Vorname:%s\n",erzeuger[i].Vorname);
    printf("Straße:%s\n",erzeuger[i].Straße);
    printf("Hausnummer:%d\n", erzeuger[i].Hausnummer);
    printf("Telefonnummer:%d\n", erzeuger[i].Telefonnummer);
    x3++;
}

    return 0;
};

I see a couple of problems with your code:

You can't use a changeable variable to declare an array. The value must either be a written constant or a constant variable. If it must be dynamic, then you'll have to use pointers and learn about memory allocation as well.

The loop to display the data is using i as the index of the array, but the loop is counting with ix.

Since you won't be doing any math operations on the integer variables, none of them need to be numbers. It will be much simpler to keep them all as strings

Accounting for these changes, your code could look like this:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const int CONTACT_LIST_SIZE = 10;
struct Telefonbucheintrag
{
char Name[15];
  char Vorname[15];
  char Straye[20];
  char Hausnummer[15];
  char Telefonnummer[15];
};
int main (void)
{
  int x1;
  printf ("Wie viele Kontakte mC6chten Sie in das Telefonbuch eintragen?\n");
  scanf ("%d", &x1);
  struct Telefonbucheintrag erzeuger[CONTACT_LIST_SIZE];
  int i;
  int x2 = 1;
  size_t size = 0;
  for (i = 0; i < x1; i++)
    {
        size += 80;
      char name[15];
      char vorname[15];
      char straye[15];
      char hausnummer[15];
      char telefonnummer[15];
      printf ("Kontaktnummer %d:\n", x2);
      printf ("Geben Sie ihren Namen ein:\n");
      scanf ("%s", erzeuger[i].Name);
      printf ("Geben Sie ihren Vorname ein:\n");
      scanf ("%s", erzeuger[i].Vorname);
      printf ("Geben Sie ihre Straye ein:\n");
      scanf ("%s", erzeuger[i].Straye);
      printf ("Geben Sie ihre Hausnummer ein:\n");
      scanf ("%s", erzeuger[i].Hausnummer);
      printf ("Geben Sie ihre Telefonnummer ein:\n");
      scanf ("%s", erzeuger[i].Telefonnummer);
      x2++;
    }

  printf ("MC6chten Sie alle Kontakte anzeigen?\n");
  int ix;
  int x3 = 1;
  for (i = 0; i < x1; i++)
    {
      printf ("Kontaktnummer %d:\n", x3);
      printf ("Name:%s\n", erzeuger[i].Name);
      printf ("Vorname:%s\n", erzeuger[i].Vorname);
      printf ("Straye:%s\n", erzeuger[i].Straye);
      printf ("Hausnummer:%s\n", erzeuger[i].Hausnummer);
      printf ("Telefonnummer:%s\n", erzeuger[i].Telefonnummer);
      x3++;
    }
  return 0;
};

Here's a simple example using memory allocation:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Telefonbucheintrag
{
char Name[15];
  char Vorname[15];
  char Straye[20];
  char Hausnummer[15];
  char Telefonnummer[15];
};
int main (void)
{
  int x1;
  printf ("Wie viele Kontakte mC6chten Sie in das Telefonbuch eintragen?\n");
  scanf ("%d", &x1);
  struct Telefonbucheintrag* erzeuger = calloc(x1,sizeof(struct Telefonbucheintrag));
  int i;
  int x2 = 1;
  for (i = 0; i < x1; i++)
    {
      printf ("Kontaktnummer %d:\n", x2);
      printf ("Geben Sie ihren Namen ein:\n");
      scanf ("%s", erzeuger[i].Name);
      printf ("Geben Sie ihren Vorname ein:\n");
      scanf ("%s", erzeuger[i].Vorname);
      printf ("Geben Sie ihre Straye ein:\n");
      scanf ("%s", erzeuger[i].Straye);
      printf ("Geben Sie ihre Hausnummer ein:\n");
      scanf ("%s", erzeuger[i].Hausnummer);
      printf ("Geben Sie ihre Telefonnummer ein:\n");
      scanf ("%s", erzeuger[i].Telefonnummer);
      x2++;
    }

  printf ("MC6chten Sie alle Kontakte anzeigen?\n");
  int x3 = 1;
  for (i = 0; i < x1; i++)
    {
      printf ("Kontaktnummer %d:\n", x3);
      printf ("Name:%s\n", erzeuger[i].Name);
      printf ("Vorname:%s\n", erzeuger[i].Vorname);
      printf ("Straye:%s\n", erzeuger[i].Straye);
      printf ("Hausnummer:%s\n", erzeuger[i].Hausnummer);
      printf ("Telefonnummer:%s\n", erzeuger[i].Telefonnummer);
      x3++;
    }
  free(erzeuger);
  return 0;
};
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.