problem mit dynamisch doppelt verkettete liste
-
Hallo
ich habe volgendes Programm bis jetzt :
struct LISTE{ char name[60]; int jahr; float preis; struct LISTE *pvor,*pnach; }; char menue(); void einlesen(struct LISTE *pein); main() { char cein; int i; struct LISTE *pein; struct LISTE vek[ANZ]; do{ cein=menue(); switch(cein) { case 'a': case 'A': { einlesen(pein); } } }while((cein!='h')&&(cein!='H')); } void einlesen(struct LISTE *pein) { char name[60]; int ipruef=0; int ianz=0,ilis=1,i; /*printf("Wieviele Werte moechten Sie eingeben\n"); scanf("%d",&ilis);*/ pein=(struct LISTE*)malloc(sizeof(struct LISTE)); printf("Bitte geben Sie ein Projektname ein: \n"); scanf("%s",name); strcpy(pein->name,name); printf("%s",pein->name); do{ printf("Bitte geben Sie ein Erstellungsjahr an:\n"); fflush(stdin); ianz=scanf("%d",&(pein->jahr)); if(((pein->jahr)<0)||(ianz==0)) { printf("Das Erstellungsjahr ist nicht gueltig!!\n"); printf("Bitte wiederholen Sie die eingbabe\n"); } else { ipruef=1; } }while(ipruef!=1); ipruef=0; do{ printf("Bitte geben Sie ein Preis an:\n"); fflush(stdin); ianz=scanf("%f",&(pein->preis)); if(((pein->preis)<0)||(ianz==0)) { printf("Der Preis ist nicht gueltig!!\n"); printf("Bitte wiederholen Sie die eingbabe\n"); } else { ipruef=1; } }while(ipruef!=1); }
und nun habe ich ein kleines problem
wenn ich nämlich in main als bsp den namen ausgeben lasse dann steht da in der struktur nichts drinne? könnte ihr mir sagen woran es liegt?ausserdem soll bei dem programm der benutzer nicht nur ein name usw eingeben koennen, nur wie kann ich es so programmieren das mehr eingaben möglich sind?
würde mich über jeder hilfe freuen, danke scho mal
mfg geschen
-
Dein Pointer pein wird per Value übergeben, d.h. es wird eine lokale Kopie angelegt. Dieser bekommt nun als Wert die neue Adresse der LISTE Struktur. Nicht aber der ursprüngliche Pointer.
Du könntest also entweder den Speicher in deiner main schon allokieren, oder den Pointer zurückgeben und setzen.Was Du im Endeffekt gemacht hast ist äquivalent zu folgendem:
void change_x_to_ten(int x){ x = 10; } int main(){ int x = 0; change_x_to_ten(x); printf("%d\n", x); // natürlich immer noch 0 }
-
ahh klar danke habe ich überhaupt nicht dran gedacht ich werds mal ausprobieren
kannst du mir auch sagen wie ich es hinbekomme, dass der benutzer einfach immer werte eingibt und ich den speicher dann dementsprechend vergrößere, ohne ihn vorher zu fragen wieviel er eigentlich eingeben möchte.
grüße geschen
-
geschen schrieb:
kannst du mir auch sagen wie ich es hinbekomme, dass der benutzer einfach immer werte eingibt und ich den speicher dann dementsprechend vergrößere, ohne ihn vorher zu fragen wieviel er eigentlich eingeben möchte.
Den Wert den Du einliest verwendest Du doch in Deiner jetzigen "Loesung" eh nicht. Für jedes Einlesen einfach Speicher für ein struct neu allokieren und an Deine Liste anhängen. Dafür hast Du doch Deine Pointer!
By the way. Hast Du schon mal getestet was passiert wenn Du für das Jahr einen Buchstaben eingibst? Glaub nicht dass das so funktioniert. fflush bringts in dem Zusammenhang meines Wissens nicht.
-
naja buchstaben werden doch abgefangen
habe dafür doch das ianz=scanf... oder irre ich mich nun totalhabe halt noch net so den plan von c
danke dir
grüße