Fuhrparkverwaltung - benötige Rat bei Vorbereitung der Umsetzung...
-
Pelle schrieb:
Wenn das 1. Element in der linked list vom struct LKW ist z.B. und alle weitere elemente vom struct anhaenger/wagen benötige ich dann globale variable die z.B. zählt wieviele structs bzw. elemente es bereits gibt, was ich dann für die laufbedingung der for schleife nehmen um alle structs zu durchlaufen, um z.B. die Zugnummer zu finden damit LKW beim anlegen doppelt vergeben wird?
eigentlich nicht. bei listen hangelt man sich normalerweise durch bzw. man hat pointer auf den anfang und/oder das ende der liste. du kannst natürlich mitzählen, wenn du's unbedingt brauchst. übrigens, wenn du einen bewährten, universell einsetzbaren listencode suchst, dann such' mal hier im forum nach 'CONTAINING_RECORD'.
-
linklist-fan schrieb:
Pelle schrieb:
Wenn das 1. Element in der linked list vom struct LKW ist z.B. und alle weitere elemente vom struct anhaenger/wagen benötige ich dann globale variable die z.B. zählt wieviele structs bzw. elemente es bereits gibt, was ich dann für die laufbedingung der for schleife nehmen um alle structs zu durchlaufen, um z.B. die Zugnummer zu finden damit LKW beim anlegen doppelt vergeben wird?
eigentlich nicht. bei listen hangelt man sich normalerweise durch bzw. man hat pointer auf den anfang und/oder das ende der liste. du kannst natürlich mitzählen, wenn du's unbedingt brauchst. übrigens, wenn du einen bewährten, universell einsetzbaren listencode suchst, dann such' mal hier im forum nach 'CONTAINING_RECORD'.
das frage ich doch dich ob ich das brauche, denn ich benötige doch für meine forschleife eine laufdauer damit ich die anzahl der structs durchgehen kann um jedes struct zu fragen ob die eingegebene LKW nummer bereits vorhanden ist...denn ein lkw hat einen eindeutige nummer!
aus meinem tollen C von a-z buch... das von vorne bis hinten voll mit fehlern ist grrrr...:
seite 675: "/ Wir reservieren Speicherplatz für unsere STruktur für das erste Element der Liste/"
if((anfang = malloc(struct angestellt))) == NULL
{
printf("kein speicher vorhanden");
return;
}und dann folgt das kopieren der vorher eingegebenen werte in die Variablen des structs. Wo zum teufel wird hier speicher reserviert??? Das ist eine dumme abfrage sonst nichts
hier ist das volle listing, kann mir jemand sagen wo hieer speicher alloziert wird? ich sehe nur if abfragen ob eine speicheralloziation == NULL ist sonst nichts bin ich zu blöde?
#include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX 20 struct datum { int tag; int monat; int jahr; }; struct angestellt { char name[MAX]; char vorname[MAX]; struct datum alter; struct datum eingest; long gehalt; struct angestellt *next; }; struct angestellt *next = NULL; struct angestellt *anfang=NULL; /* Wir hängen einen Datensatz an oder geben einen neuen ein * n=name,v=vornam,at=alter.tage,am=alter.monat,aj=alter.jahr * eint=eigestellt tag,einm=eingestellt monat,einj=eingest. * Jahr g=gehalt */ void anhaengen(char *n, char *v, int at, int am, int aj, int eint, int einm, int einj, long g) { /* Zeiger zum Zugriff auf die einzelnen Elemente * der Struktur*/ struct angestellt *zeiger; /* Wir fragen ab, ob es schon ein Element in der Liste * gibt. Wir suchen das Element, auf das unser Zeiger * *anfang zeigt. Falls *anfang immer noch auf NULL zeigt, * bekommt *anfang die Adresse unseres 1. Elements und ist * somit der Kopf (Anfang) unserer Liste */ if(anfang == NULL) { /* Wir reservieren Speicherplatz für unsere Struktur * für das erste Element der Liste*/ if((anfang = (struct angestellt *) malloc(sizeof(struct angestellt))) == NULL) { fprintf(stderr, "Kein Speicherplatz vorhanden " "für anfang\n"); return; } strcpy(anfang->name, n); strcpy(anfang->vorname, v); anfang->alter.tag = at; anfang->alter.monat = am; anfang->alter.jahr = aj; anfang->eingest.tag = eint; anfang->eingest.monat = einm; anfang->eingest.jahr = einj; anfang->gehalt = g; /* Somit haben wir unseren Anfang der Liste. Von nun an * zeigt der Zeiger anfang immer auf das Element vor ihm. * Da dies aber jetzt das 1. Element der Liste war, zeigt * der Zeiger anfang auf den Zeiger next. next zeigt am * Ende immer wieder NULL */ anfang->next=NULL; } /* Es scheint schon mindestens ein Element in der Liste * vorhanden zu sein, da der Anfang nicht == NULL ist. * Jetzt suchen wir so lange nach dem nächsten Element, * bis der *next-Zeiger auf NULL zeigt. Somit haben wir * das Ende der Liste gefunden und können einen neuen * Datensatz anhängen */ else { zeiger=anfang; /* Wir zeigen auf das 1. Element */ while(zeiger->next != NULL) zeiger=zeiger->next; /* Wir reservieren einen Speicherplatz für das letzte * Element der Liste und hängen es an. */ if((zeiger->next =(struct angestellt *) malloc(sizeof(struct angestellt))) == NULL) { fprintf(stderr,"Kein Speicherplatz für das " "letzte Element\n"); return; } zeiger=zeiger->next; /* zeiger auf neuen Speicherplatz */ strcpy(zeiger->name,n); strcpy(zeiger->vorname,v); zeiger->alter.tag=at; zeiger->alter.monat=am; zeiger->alter.jahr=aj; zeiger->eingest.tag=eint; zeiger->eingest.monat=einm; zeiger->eingest.jahr=einj; /* Wir terminieren wieder unsere Datenstruktur */ zeiger->gehalt=g; zeiger->next=NULL; } } /* Funktion zur Eingabe der Daten */ void eingabe(void) { char nam[MAX],vorn[MAX]; int atag,amon,ajahr,eintag,einmon,einjahr; long gehalt; printf("Name........................: "); fgets(nam, MAX, stdin); printf("Vorname.....................: "); fgets(vorn, MAX, stdin); printf("Alter...........(tt.mm.jjjj): "); scanf("%2d.%2d.%4d",&atag,&amon,&ajahr); printf("Eingestellt am..(tt.mm.jjjj): "); scanf("%2d.%2d.%4d",&eintag,&einmon,&einjahr); printf("Monatsgehalt................: "); scanf("%ld",&gehalt); getchar(); /* Eingegebenen Datensatz hinten anhängen */ anhaengen(nam, vorn, atag, amon, ajahr, eintag, einmon, einjahr, gehalt); } int main(void) { while(1) eingabe(); return EXIT_SUCCESS; }
das ist so geil ich habe hier Codeblocks der hat keinen debugger drin, obwohl ich mingw installiert habe und bei VS 2005 kann ich keine .c datei kompilieren, der menüpunkt ausgegraut ist prima danke an alle ich geh jetzt kotzen, melde morgen wieder.
-
Pelle schrieb:
if((anfang = malloc(struct angestellt))) == NULL
{
printf("kein speicher vorhanden");
return;
}
und dann folgt das kopieren der vorher eingegebenen werte in die Variablen des structs. Wo zum teufel wird hier speicher reserviert??? Das ist eine dumme abfrage sonst nichtsdas ist beides und schlechter programmierstil. die geschweiften klammern in der gleichen zeile wie die zuweisung+abfrage, sowie der cast im originalcode, tragen auch zur unleserlichkeit bei. man kann es auch so schreiben:
anfang = malloc(sizeof(struct angestellt)); if (anfang == 0) { // kein speicher }
-
juergen-wolf-hasser schrieb:
Pelle schrieb:
if((anfang = malloc(struct angestellt))) == NULL
{
printf("kein speicher vorhanden");
return;
}
und dann folgt das kopieren der vorher eingegebenen werte in die Variablen des structs. Wo zum teufel wird hier speicher reserviert??? Das ist eine dumme abfrage sonst nichtsdas ist beides und schlechter programmierstil. die geschweiften klammern in der gleichen zeile wie die zuweisung+abfrage, sowie der cast im originalcode, tragen auch zur unleserlichkeit bei. man kann es auch so schreiben:
anfang = malloc(sizeof(struct angestellt)); if (anfang == 0) { // kein speicher }
so war 45 min die küche putzen hat gut getan etwas bewegung...
also wird doch speicher alloziiert nur die dumme schreibweise verdeckte... das ganze. Als wird speicher angefordet, gefragt ob der Zeiger auf nichts zeigt sprich fehler und sonst gehts halt weiter im programm, ok danke. bis morgen.
-
OMG... SCHREIBFEHLER... anheanger anstatt anhaenger...
Gelöst, ab zur sortierten liste jetzt... cu
Fehlermeldung: siehe Bild:
http://img507.imageshack.us/my.php?image=testat5.gif
Warum kann ich in diesem tollen Forum kein bild anhängen, geht das nur im 1. Post meines Threads?
Programmbeschreibung: Anhängernummer und Anhängername werden eingegeben und einfach ungeordnet an die liste gehängt. Das geordnete kommt später ...
struct anhaenger { int iAnhaengerNummer; char sAnhaengerName[256]; struct anhaenger *next; }; struct anhaenger *next = NULL; struct anheanger *anfang = NULL;
void eingabe_Anhaenger() { int iAnNummer; char sAnName[256]; printf("Geben Sie eine Anhaengernummer ein: "); scanf("%i",&iAnNummer); fflush(stdin); printf("Geben Sie einen Anhaengernamen ein: "); scanf("%s",sAnName); fflush(stdin); haengean_Anhaenger(iAnNummer,sAnName); }
void haengean_Anhaenger(int iAnNummer, char *sAnName) { struct anhaenger *zeiger; if(anfang == NULL) // Wenn der Zeiger "anfang" == NULL ist, wurde noch kein Strukturelement erstellt bzw. Anhänger angehängt { anfang = malloc(sizeof(struct anhaenger)); // der Zeiger "anfang" Zeigt nun auf die Adresse eines neuen Strukturelements if (anfang == 0) { fprintf(stderr, "Es konnte für den Zeiger 'anfang' keinen Speicher reserviert werden, vielleicht zu wenig RAM eingebaut... \n"); return; } anfang->iAnhaengerNummer = iAnNummer; strcpy(anfang->sAnhaengerName, sAnName); anfang->next = NULL; } else { zeiger=anfang; // Sonst wird auf das 1. Strukturelement gezeigt while(zeiger->next != NULL) // Solange der Zeiger "next" nicht auf das Ende der Strukturliste zeigt bzw. nicht auf das letzte Strukturelement zeiger = zeiger->next; // Der Zeiger "zeiger" zeigt nun ein Strukturelement weiter zeiger->next = malloc(sizeof(struct anhaenger)); if (zeiger->next == NULL) { fprintf(stderr, "Es konnte für den Zeiger für das letzte Element reserviert werden\n"); return; } zeiger = zeiger->next; // zeige auf den neuen Speicherplatz anfang->iAnhaengerNummer = iAnNummer; strcpy(anfang->sAnhaengerName, sAnName); zeiger->next = NULL; } }
-
damit will ich alle Anhänger ausgeben, die zuvor eingegeben wurden.
Das klappt zwar doch nicht 100 richtig. Ich gebe z.B. ein
Nummer: 1 Name: bla
Nummer: 3 Name: muhwenn ich jetzt die ausgabe Anhänger fkt. aufrufe bekomme ich die Nummer 3 ausgegeben sprich die erste Ausgabe ist die letzte Eingabe und danach bekomme ich nochmals ein Ausgabe mit einem "kaputten" Namen und Nummer sprich irgendwelchen ascii codes, ich denke der Zeiger scheint etwas wild wo hinzuzeigen... nur wo... ich vermute jetzt einfach mal ins Blaue, dass der Zeiger "anfang" nicht auf das 1. Element zeigt sondern auf das letzte Element der verketteten Liste doch wie bekomme ich den Zeiger "ptr" auf das 1. Element?
Hm doch vielleicht ist es auch so, dass bei Eingabe der beiden wagennummern diese sich überschreiben und mein Code ist inkonsistent? wies so schön heißt
Könnte das jemand überprüfen bitte und mir Bescheid geben, danke schön!
void gebeaus_Anhaenger() { struct anhaenger *ptr = anfang; while(ptr != NULL) { printf("\nDer Wagen mit der Wagennummer: %i hat den Wagennamen: %s",ptr->iAnhaengerNummer,ptr->sAnhaengerName); ptr = ptr->next; } }
Edit: Also wenn ich anstatt obigem while(...) das hier schreibe:
while(ptr->next != NULL)
schreibe wird nur das letzte eingegebene ausgegeben und nicht die kaputten Zeichen denn ich denke das sind eben "werte" die in "NULL" stehen sprich irgendwo ausserhalb der liste, kann das irgendwie einer bestätigen oder mir da weiterhelfen bitte?
-
**habe mir nochmals das Foren RTFM!!! durchgelesen und entschuldige mich vor allem bei dir Tim zitat:"- _Nie_ pampig werden!"
sorry das ich manchmal ausfallend war kommt nicht wieder vor**
**ok da auf vorigen Post keiner geantwortet hat von mir vergeßt obige Frage, nur diese hier ist wichtig:
**
Es gibt folgende 4 Funktionen:void eingabe_Anhaenger(void); void ausgabe_Anhaenger(void); void haengean_Anhaenger(int iAnNummer, char *sAnName); void sortiertes_Anhaengen(int iAnNummer, char *sAnName);
eingabe und ausgabe is klar ne...
die funktion haengean_Anhaenger wird aufgerufen wenn einfach hinten an die liste angehängt wird sprich das Element mit der höchsten Anhängernummer kommt nach hinten oder es wurd noch gar kein Element eingegeben.
die funktion sortiertes_Anhaengen ist für alle anderen fälle z.B. wenn die Anhängernummer sich irgendwo dazwischen befindet:
Ich bekomme zwar eine Ausgabe die sortiert ist nach den Anhängernummern, aber nicht aufsteigend sondern absteigend
man könnte meine na dann dreh ich halt das Zeichen ">" um und mache "<" daraus doch weit gefehlt dann ist die liste komplett unsortiert UND die letzen paar Datensätze der Ausgabe sind immer kaputte datensätze sprich wirre ascii codes
falsch nurmerierte Ausgabe:
http://666kb.com/i/auzioeq38irharklh.gifkaputte unsortierte Ausgabe:
http://img244.imageshack.us/my.php?image=kaputtesortierungak5.gifstruct anhaenger { int iAnhaengerNummer; char sAnhaengerName[256]; struct anhaenger *next; }; struct anhaenger *next = NULL; struct anhaenger *anfang = NULL;
Die Main-Funktion somit könnt ihr das Progrämmchen einfach testen...
#include <stdio.h> #include <stdlib.h> #include <windows.h> #include <string.h> int main(void) { int eingabe; do { printf("<1> Anhaenger eingeben \n"); printf("<2> Anhaenger ausgeben \n"); printf("Ihre Auswahl bitte: "); scanf("%i", &eingabe); loescheBildschirm(); switch(eingabe) { case 0 : printf("Auf Wiedersehen!\n");break; case 1 : eingabe_Anhaenger();break; case 2 : ausgabe_Anhaenger();break; } } while(eingabe != 0); return EXIT_SUCCESS; }
void eingabe_Anhaenger() { int iAnNummer; char sAnName[256]; printf("Geben Sie eine Anhaengernummer ein: "); scanf("%i",&iAnNummer); fflush(stdin); printf("Geben Sie einen Anhaengernamen ein: "); scanf("%s",sAnName); fflush(stdin); sortiertes_Anhaengen(iAnNummer,sAnName); }
void ausgabe_Anhaenger() { struct anhaenger *zeiger = anfang; while(zeiger != NULL) { printf("Die Anhängernummer: %i der Anhängername: %s \n\n",zeiger->iAnhaengerNummer,zeiger->sAnhaengerName); zeiger = zeiger->next; } }
void sortiertes_Anhaengen(int iAnNummer, char *sAnName) { struct anhaenger *zeiger; struct anhaenger *zeiger1; if(anfang == NULL) // Wenn zuvor noch kein Element eingegeben wurde in die Liste sprich das 1. Element wird einfach angefügt { haengean_Anhaenger(iAnNummer,sAnName); } else { zeiger=anfang; while(zeiger != NULL && (zeiger->iAnhaengerNummer > iAnNummer)) zeiger= zeiger->next; if(zeiger == NULL) // Wenn wir am Ende der Liste angekommen sind wird das Element einfach angehängt da es die größte Anhängernummer haben muss { haengean_Anhaenger(iAnNummer, sAnName); } else if(zeiger==anfang) // Wenn unser Element das kleinste ist sprich kleiner als das 1. Element so wirds an den Anfang gehängt { anfang = malloc(sizeof(struct anhaenger)); if(NULL == anfang) { fprintf(stderr," Kein Speicher vorhanden :-( \n"); } anfang->iAnhaengerNummer=iAnNummer; strcpy(anfang->sAnhaengerName, sAnName); anfang->next = zeiger; } else /* Oder das Element gehört nicht an den Anfang/Ende sondern irgendwo dazwischen... */ { zeiger1 = anfang; while(zeiger1->next != zeiger) // gesucht ist das Element, dass sich vor dem Zeiger "zeiger" befindet zeiger1 = zeiger1->next; zeiger = malloc(sizeof(struct anhaenger)); if(NULL == zeiger) { fprintf(stderr," Kein Speicher vorhanden :-( \n"); } anfang->iAnhaengerNummer=iAnNummer; strcpy(anfang->sAnhaengerName, sAnName); zeiger->next = zeiger1->next; // Damit wird oben geschriebe Nummer/Name an die richtige Stelle eingefügt zeiger1->next = zeiger; } } }
void haengean_Anhaenger(int iAnNummer, char *sAnName) { struct anhaenger *zeiger; if(anfang == NULL) // Wenn der Zeiger "anfang" == NULL ist, wurde noch kein Strukturelement erstellt bzw. Anhänger angehängt { anfang = malloc(sizeof(struct anhaenger)); // der Zeiger "anfang" Zeigt nun auf die Adresse eines neuen Strukturelements if (anfang == 0) { fprintf(stderr, "Es konnte für den Zeiger 'anfang' keinen Speicher reserviert werden, vielleicht zu wenig RAM eingebaut... \n"); return; } anfang->iAnhaengerNummer = iAnNummer; strcpy(anfang->sAnhaengerName, sAnName); anfang->next = NULL; } else { zeiger=anfang; // Sonst wird auf das 1. Strukturelement gezeigt while(zeiger->next != NULL) // Solange der Zeiger "next" nicht auf das Ende der Strukturliste zeigt bzw. nicht auf das letzte Strukturelement zeiger = zeiger->next; // Der Zeiger "zeiger" zeigt nun ein Strukturelement weiter zeiger->next = malloc(sizeof(struct anhaenger)); if (zeiger->next == NULL) { fprintf(stderr, "Es konnte für den Zeiger für das letzte Element reserviert werden\n"); return; } zeiger = zeiger->next; // zeige auf den neuen Speicherplatz anfang->iAnhaengerNummer = iAnNummer; strcpy(anfang->sAnhaengerName, sAnName); zeiger->next = NULL; } }
-
Da mein debugger immer noch nicht geht, da er nicht vorhanden ist sprich in meiner MingW installation war keine gdb.exe, falls die jemand hat bitte hier hochladen sendspace.com oder direktlink, danke.
Vielleicht kanns einer von euch debuggen:
ich iteriere durch die Liste solange der Zeiger "ptr" nicht NULL ist UND solange die Anhängernummer in der Struktur ungleich der eingegeben Anhängernummer ist sprich sobald die Anhängernummer beide gleich sind müsste ich eigentlich aus der while schleife fliegen doch weit gefehlt... Ich gebe eine Anhängernummer ein und Name, suche danach dann und prompt gebt mein VS 2005 debugger fenster auf bzw. ein Fenster wo ich sagen kann ich will den VS 2005 als debugger festlegen... Ich benutze aber die Codeblocks IDE noch im MOment nur habe ich da keinen debugger ala gdb.exe... Kann mir jemand sagen warum die Suche nicht geht?
void suche_AnhaengerNummer() { struct anhaenger *ptr = anfang; int iAnNum; printf("Anhängernummer eingeben: "); scanf("%i", &iAnNum); while((ptr != NULL) && (ptr->iAnhaengerNummer != iAnNum)) { ptr = ptr->next; } printf("Die gesuchte Wagennummer ist %i \n", iAnNum); printf("Die Wagennummer lautet: %i und der Wagenname ist: %s \n",ptr->iAnhaengerNummer,ptr->sAnhaengerName); }
Und bitte nicht alle auf einmal antworten sonst habe ich das Gefühl hier redet noch jemand mit mir
-
Pelle schrieb:
Da mein debugger immer noch nicht geht, da er nicht vorhanden ist sprich in meiner MingW installation war keine gdb.exe, falls die jemand hat bitte hier hochladen sendspace.com oder direktlink, danke.
hast du nicht weiter oben geschrieben, dass du auch vs2005 besitzt? wenn ja, benutze dessen debugger. einen besseren gibt es nicht unter windoofs.
-
debugging-fan schrieb:
Pelle schrieb:
Da mein debugger immer noch nicht geht, da er nicht vorhanden ist sprich in meiner MingW installation war keine gdb.exe, falls die jemand hat bitte hier hochladen sendspace.com oder direktlink, danke.
hast du nicht weiter oben geschrieben, dass du auch vs2005 besitzt? wenn ja, benutze dessen debugger. einen besseren gibt es nicht unter windoofs.
und was gebe ich in dem debugger ein? sorry ich kann in dem VS 2005 DAU... IDE nicht mal compilen da es ausgegraut ist...
habe die .c datei im datei manager geöffnet mit öffnen mit... dann hats den VS 05 geladen siehe hier kann nicht compilen:
http://666kb.com/i/auzlh8o9zq6tysbgl.gif
kann mir den keiner das kurz debuggen? Selbst wenn ichs könnte wüßte ich nicht was ich dabei machen sollte...
-
du musst für vs 2005 ein leeres 'konsolen'-projekt erzeugen. dann legst du eine .c datei an (achtung: muss .c heissen, nicht .cpp) und bindest die ins projekt ein (in der projektansicht, rechte maustaste, vorhandenes objekt einbinden oder so ähnlich heisst das). vs befindet sich dann automatisch im debug-modus. wenn du das programm startest wird er stoppen, wenn er einen fehler entdeckt und du kannst dir dann alle variablen, den speicher, den call-stack usw. ansehen.
-
vs2005-fan schrieb:
du musst für vs 2005 ein leeres 'konsolen'-projekt erzeugen. dann legst du eine .c datei an (achtung: muss .c heissen, nicht .cpp) und bindest die ins projekt ein (in der projektansicht, rechte maustaste, vorhandenes objekt einbinden oder so ähnlich heisst das). vs befindet sich dann automatisch im debug-modus. wenn du das programm startest wird er stoppen, wenn er einen fehler entdeckt und du kannst dir dann alle variablen, den speicher, den call-stack usw. ansehen.
habe das vorhin probiert ein konsolenwin32 app angelegt doch wies so war machte er mir ne .cpp und die main darin... ok bei speicher unter habe ich halt in bla.c umgenannt oder so und compiled dann dies...:
"meinNeuesProjekt.exe": "D:\test\meinNeuesProjekt\debug\meinNeuesProjekt.exe" geladen, Symbole wurden geladen. "meinNeuesProjekt.exe": "C:\WINXP\system32\ntdll.dll" geladen, Keine Symbole geladen. "meinNeuesProjekt.exe": "C:\WINXP\system32\kernel32.dll" geladen, Keine Symbole geladen. "meinNeuesProjekt.exe": "C:\WINXP\WinSxS\x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_5490cd9f\msvcr80d.dll" geladen, Symbole wurden geladen. "meinNeuesProjekt.exe": "C:\WINXP\system32\msvcrt.dll" geladen, Keine Symbole geladen. Das Programm "[3612] meinNeuesProjekt.exe: Systemeigen" wurde mit Code 0 (0x0) beendet.
Eigentlich müsste eine Kosolenfenster sichtbar bleiben mit meinem 3 punkte menü...
ICH WILL NICHT VS 2005 benutzen verstehst du das nicht???
Ich habe mich jetzt auf Codeblocks eingearbeitet etc brauche nur die verflixte gdb.exe Datei WARUM finde ich die in dem Minwinstaller von januar 2007 nicht, es kann doch nicht angehen das ein komplettinstaller ohne debugger ausgeliefert wird wo gibts denn sowas hallo? :p
-
In Zeile 14 der Funktion 'suche_AnhaengerNummer' greifste ständig auf 'ptr->iAnhaengerNummer' und 'ptr->sAnhaengerName' zu.
Obwohl ptr mit NULL aus der while-Schleife geflogen sein kann !
-
Pelle schrieb:
ICH WILL NICHT VS 2005 benutzen verstehst du das nicht???
okay, es ist deine entscheidung.
-
@bleib doch locker...
Ich habs doch net böse gemeint, nur mach ich schon den ganzen Tag an den 3 pippi dingern rum und komm net weiter und das aufpoppende Fenster vom VS 05 nervt mich unsäglich, wenn ich dem nein sage, ich will den VS 05 nicht als debugger die "Sau" poppt dennnoch immer wieder auf, tja einmal M$ immer M$
debugservice schrieb:
In Zeile 14 der Funktion 'suche_AnhaengerNummer' greifste ständig auf 'ptr->iAnhaengerNummer' und 'ptr->sAnhaengerName' zu.
Obwohl ptr mit NULL aus der while-Schleife geflogen sein kann !
danke dir debuservice...
das stimmt sprich wenn ich aus der schleife bin, zeigt ptr auf NULL und mein Ausgabe wird natürlich nix... Hmm... *denk , grübel* Die Ausgabe in der Schleife machen ist aber auch quark dann bekomme ich ja alle Elemente ausgegeben solange beine Anhängernummern nicht übereinstimmen. toll was bleibt dann noch? Oder ist die "&&"-Verknüpfung vllt. falsch?
Hm.. ich habe nochmals nummer: 1 und name: bla eingegeben und nach 1 gesucht und er gibts aus, dann habe ich nummer: 3 und name: muh eingegeben und wieder nach 1 gesucht und dieses dämliche VS 2005 Fenster springt wieder auf...
also das komische ist ich habe 4 werte eingegeben einer hatte die nummer 4 sprich die 1. Eingabe, danach habe ich alle ausgegeben um zu sehen ob sie auch existieren und dann habe ich speziel nach der 4 gesucht und ausgegeben dann gings, es geht aber net immer???
Kann mir jemand sagen was an der logik denn falsch ist im suche_AnhaengerNummer() ?
-
Prüf mal Zeile 37 bis 42 in der Funktion 'haengean_Anhaenger' ob dort die Logik stimmt :
'zeiger' zeigt zwar auf den neuen Speicherplatz, aber 'anfang' werden 'iAnNummer' und 'sAnName' zugewiesen ?
-
debugservice schrieb:
Prüf mal Zeile 37 bis 42 in der Funktion 'haengean_Anhaenger' ob dort die Logik stimmt :
'zeiger' zeigt zwar auf den neuen Speicherplatz, aber 'anfang' werden 'iAnNummer' und 'sAnName' zugewiesen ?
*Brett vorm Kopf* klar das mus zeiger->...nummber und zeiger->...name heißen jetzt geht auch die sortierung einwandfrei und die suche super... hoffe das bleibt so...
danke bis morgen mit neuen fragen
-
so nochmals zurück zu der suche_AnhaengerNummer():
habs sie mal abgeändert habe nach existierendem und nicht existierendem Anhänger gesucht beides gab die richtige Ausgabe:
void suche_AnhaengerNummer() { struct anhaenger *ptr = anfang; int iAnNum; printf("Anhängernummer eingeben: "); scanf("%i", &iAnNum); while(ptr != NULL) // && (ptr->iAnhaengerNummer != iAnNum)) { if(ptr->iAnhaengerNummer == iAnNum) { printf("Die gesuchte Anhängernummer ist %i \n", iAnNum); printf("Die Anhängernummer lautet: %i und der Anhängername ist: %s \n",ptr->iAnhaengerNummer,ptr->sAnhaengerName); return; } ptr = ptr->next; } printf("Die gesuchte Anhängernummer %i existiert nicht \n", iAnNum ); }
Doch wie ich es mir dachte... das sortierte einfügen geht DOCH NICHT... ich finde den fehler nicht...
Sieht jemand mehr als ich?
ok habs:
Zeile 49+50 von sortiertes_Anhaengen...
anfang->iAnhaengerNummer=iAnNummer; strcpy(anfang->sAnhaengerName, sAnName);
das war natürlich quark wie davor auch schon tststs... anfang muss zeiger heißen, hab jetzt 2x 8 zahlen kreuz/quer eingegeben mit > und dem < zeichen sortieren jeweils andersrum richtig also sollte... das jetzt passen.
laters...
-
while((ptr = suche_AnhaengerNummer(iAnhaengerNummer)) == NULL);
Ist das nicht das gleiche?:
while(suche_AnhaengerNummer(iAnhaengerNummer) == NULL);
1. while schleife habe ich aus einem 10 jahre alten C buch was net schlecht sein muss...