Seite 1 von 1

Struct+Array+Ausgabe

Verfasst: Do 27. Jan 2011, 20:39
von Robiwan
da ich info1 letztes jahr nicht mitgeschrieben hab, muss ich dieses jahr ran^^
so hier mein prob, iwie passt dem was in der stb in output.c nicht. immer wenn ich versuche das auszugeben kommt eine fehlermeldung und er springt in output.c...

hier mein code:

Code: Alles auswählen

typedef struct{char* name;char* password;int status;} Account;
# define NUTZER 10
void N3_c()
{
	int i=0;
	Account Data[10];

	do 
	{
		printf("Name:");
		scanf("%s",&Data[i].name);
		fflush(stdin);
		printf("Password:");
		scanf("%s",&Data[i].password);
		fflush(stdin);
		printf("Status:");
		scanf("%d",&Data[i].status);
		fflush(stdin);
		i++;
	} while (i<10 && Data[i-1].status!=(-1));
	for (int j=0;j<i;j++)
	{
		printf("ACCOUNT:\n Name:%s\nPassword:%f\nStatus:%d",Data[j].name,Data[j].password,Data[j].status);
	}


}

Re: Struct+Array+Ausgabe

Verfasst: Do 27. Jan 2011, 21:28
von testuser
Hi, du hast den name und password pointern kein speicher zugewiesen. Du muss es entweder mit malloc machen oder so ist auch möglich:

Code: Alles auswählen

# define NUTZER 10

typedef struct{
	char name[10];
	char password[10];
	int status;
} Account;

void N3_c()
{
   int i=0;
   Account Data[NUTZER];

   do
   {
      printf("Name:");
      scanf("%s",&Data[i].name);
      fflush(stdin);
      printf("Password:");
      scanf("%s",&Data[i].password);
      fflush(stdin);
      printf("Status:");
      scanf("%d",&Data[i].status);
      fflush(stdin);
      i++;
   } while (i < NUTZER && Data[i-1].status != (-1));
   for (int j = 0; j < i; j++)
   {
      printf("ACCOUNT:\n Name:%s\nPassword:%s\nStatus:%d\n",Data[j].name,Data[j].password,Data[j].status);
   }
}

Re: Struct+Array+Ausgabe

Verfasst: Do 27. Jan 2011, 21:30
von bob10
scanf() musst Du die Adresse eines Arrays übergeben, wo der String reingeschrieben wird. Da der Arrayname schon ein Zeiger ist, kannst Du das & bei den Zeichenketten weglassen.

In Deiner Struktur sind Zeiger für Name und Passwort.
Die Zeiger zeigen aber an eine mehr oder weniger zufällige Stelle im Speicher, Du müsstest mit malloc() Speicher dafür anfordern oder folgendes machen:

typedef struct{
char name[100];
char password[100];
int status;
} Account;

Ist natürlich nicht perfekt, denn was passiert wohl bei mehr als 99 eingegebenen Buchstaben? ;-)
Aber für Info1 sollte es so ok sein, solange Dir klar ist, was passieren kann.

Hier mal überarbeitet mit malloc() und free():

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>

#define NUTZER 10
#define LAENGE 100

typedef struct{
	char* name;
	char* password;
	int status;
} Account;

int main(int argc, char* argv[]) {
   int j, i=0;
   Account Data[NUTZER];

   do
   {
	   Data[i].name = (char*) malloc(LAENGE * sizeof(char));
	   /* wir gehen davon aus, dass malloc erfolgreich ist, prüfen also nicht auf NULL als Rückgabe */
      printf("Name:");
      scanf("%s",Data[i].name);
      fflush(stdin);

	  Data[i].password = (char*) malloc(LAENGE * sizeof(char));
      printf("Password:");
      scanf("%s",Data[i].password);
      fflush(stdin);

      printf("Status:");
      scanf("%d",&Data[i].status);
      fflush(stdin);

      i++;
   } while (i<NUTZER && Data[i-1].status!=(-1));

   for (j=0;j<i;j++)
   {
      printf("\nACCOUNT:\n Name:%s\nPassword:%s\nStatus:%d\n",Data[j].name, Data[j].password, Data[j].status);
	  free(Data[j].name);
	  free(Data[j].password);
   }

	return 0;
}

Re: Struct+Array+Ausgabe

Verfasst: Do 27. Jan 2011, 21:57
von Robiwan
thx :-)

ja hab vergessen Speicher zu reservieren..