Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Ringverkettete Listen mit C » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Ringverkettete Listen mit C
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Matze84
Eroberer


Dabei seit: 14.10.2012
Beiträge: 73

Ringverkettete Listen mit C Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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"
19.12.2012 08:27 Matze84 ist offline Beiträge von Matze84 suchen Nehmen Sie Matze84 in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
19.12.2012 10:06 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Matze84
Eroberer


Dabei seit: 14.10.2012
Beiträge: 73

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
19.12.2012 12:23 Matze84 ist offline Beiträge von Matze84 suchen Nehmen Sie Matze84 in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
19.12.2012 13:02 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Ringverkettete Listen mit C