Ringverkettete Listen mit C

Neue Frage »

Auf diesen Beitrag antworten »
Matze84 Ringverkettete Listen mit C

Ich bin immernoch in den Prüfungsvorbereitungen:
Aufgabe ist: Schreiben Sie ein Programm, das integer-Zahlen in eine ringverkettete Liste über Tastatur
einliest. Das Einlesen soll durch Eingabe der Zahl 0 beendet werden, wobei die 0 kein
Bestandteil der Liste werden soll.


Meine Idee:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
#include "stdafx.h"
#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"

struct zahl
{
	int wert;
	zahl *next;
};
int _tmain(int argc, _TCHAR* argv[])
{
	zahl *zeiger, *anfang;
	anfang=(zahl*)malloc(sizeof(zahl));
	zeiger=anfang;
	int zahl=0;
	while(1)
	{
		scanf("%i",&zahl);
		if(zahl==0)
		{
			break;
		}
		zeiger->wert=zahl;
		zeiger->next=(zahl*)malloc(sizeof(zahl));
		zeiger=zeiger->next;
		zeiger->next=anfang;
	}

	return 0;
}


Dann hab ichs mit Visual Studio 2010 Express mal probiert... und er meckert in Zeile 25.
In Zeile 14, die ja fast identisch ist mit Zeile 25 meckert er nicht unglücklich
Woran liegt das?
Er unterstreicht mir das malloc und die ")" davor und sagt "; erwartet"
 
Auf diesen Beitrag antworten »
Karlito

Hallo,

Du deklarierst in Zeile 16 eine Variable "zahl". Ab diesem Zeitpunkt steht zahl nicht mehr für das struct.

Bekommst Du keine Fehlermeldung, dass der Typ zahl in Zeile 9 nicht bekannt ist? Normalerweise musst Du hier eine Forward-Deklaration machen, damit du dem Compiler mitteilst, dass es einen Typ zahl gibt.

Ich mache das immer so:
code:
1:
2:
3:
4:
5:
6:
7:
8:
typedef struct zahl_s zahl_t;
struct zahl_s
{
	int wert;
	zahl_t *next;
};


VG,

Karlito
Auf diesen Beitrag antworten »
Matze84

meine IDE hat nur den einen fehler angemeckert....
und was das in zeile 9 stehende zahl angeht... (bzw jetzt zahl_t) nein da meckert er nicht... unser professor hat es uns auch NUR so erklärt....
findes es auch komisch, weil in meinem buch, was ich nebenbei lese steht dazu
code:
1:
2:
3:
4:
5:
6:
7:
8:
typedef struct name
{
int irgenwas;
struct name *einname;
}
//nur mal als beispiel.....


ok danke... für den tip....
habe einfach mein Struct und alles was dazu gehört zahl_t genannt.
Der Code sieht dann jetzt wie folgt aus.
und es gibt keine fehlermeldung mehr.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
struct zahl_t
{
	int wert;
	zahl_t *next;
};
int _tmain(int argc, _TCHAR* argv[])
{
	zahl_t *zeiger, *anfang;
	anfang=(zahl_t*)malloc(sizeof(zahl_t));
	zeiger=anfang;
	int zahl=0;
	while(1)
	{
		scanf("%i",&zahl);
		if(zahl==0)
		{
			break;
		}
		zeiger->wert=zahl;
		zeiger->next=(zahl_t*)malloc(sizeof(zahl_t));
		zeiger=zeiger->next;
		zeiger->next=anfang;
	}

	return 0;
}


Aber du musst mir bitte nochmal dein struct erklären....
Zitat:
Original von Karlito
Ich mache das immer so:
code:
1:
2:
3:
4:
5:
6:
7:
8:
typedef struct zahl_s zahl_t;
struct zahl_s
{
	int wert;
	zahl_t *next;
};


warum hast du da zahl_s UND zahl_t
weil ich dachte nachdem typedef struct kommt der name des dings hin...
*verwirrt bin* geschockt

LG Matze
Auf diesen Beitrag antworten »
Karlito

Hallo,

ich habe gerade etwas neues gelernt Augenzwinkern

Meine Auffassung war, dass wenn du ein struct verwendest, was einen Zeiger auf sich selbst beinhaltet, das struct selbst noch nicht bekannt ist.

code:
1:
2:
3:
4:
5:
6:
7:
8:
typedef struct name
{
int irgenwas;
struct name *einname; //ich dachte "name" ist hier noch nicht bekannt
                      //weil noch nicht zuende deklariert
}


Keine Ahnung, wie sich das eingeschlichen hat.

Ich lese auch überall, dass man "struct" mit hinschreiben muss. Vielleicht macht MS da mal wieder was, was nicht so Standardkonform ist. Das kann man durch das typedef verkürzen. Ansonsten, solange es funktioniert, ist ja alles gut. Und im Zweifel immer an die Definition des Profs halten Augenzwinkern

VG,

Karlito
 
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »