Struct+Array+Ausgabe

Moderator: Moderatoren

Antworten
Robiwan
Beiträge: 100
Registriert: Mi 3. Mär 2010, 23:51

Struct+Array+Ausgabe

Beitrag von Robiwan » Do 27. Jan 2011, 20:39

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);
	}


}

testuser
Beiträge: 180
Registriert: Mi 25. Jun 2008, 18:47

Re: Struct+Array+Ausgabe

Beitrag von testuser » Do 27. Jan 2011, 21:28

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);
   }
}
Мои пять копеек

bob10
Beiträge: 414
Registriert: So 1. Feb 2009, 19:34

Re: Struct+Array+Ausgabe

Beitrag von bob10 » Do 27. Jan 2011, 21:30

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;
}

Robiwan
Beiträge: 100
Registriert: Mi 3. Mär 2010, 23:51

Re: Struct+Array+Ausgabe

Beitrag von Robiwan » Do 27. Jan 2011, 21:57

thx :-)

ja hab vergessen Speicher zu reservieren..

Antworten

Zurück zu „Info I“