[C++] Problem mit Boolean

XtremeCJ

Erfahrenes Mitglied
Hallo allerseits,

Ich habe die Aufgabe, ein Lagersystem zu erstellen. Es sollen 100 Kisten mit Länge, Breite und Höhe bestimmt werden können. Außerdem will ich, dass man bestimmen kann, welcher Kiste man die Daten zuweisen möchte. Wird dabei eine Kiste angegeben, die schon verwendet wird, soll eine Meldung diesbezüglich kommen. Also war mein erster Gedanke der hier:

Code:
void neu(Boolean nindex[100]){
	Int32 nauswahl,nlaenge,nbreite,nhoehe;
	Console::Write("Für welche Kiste möchten Sie die Daten eingeben?\t");
	nauswahl=Convert::ToInt32(Console::ReadLine());
	if (nauswahl<=100 && nindex[nauswahl-1]==false){
		Console::Write("Länge:\t");
		nlaenge=Convert::ToInt32(Console::ReadLine());
		Console::Write("Breite:\t");
		nbreite=Convert::ToInt32(Console::ReadLine());
		Console::Write("Höhe:\t");
		nhoehe=Convert::ToInt32(Console::ReadLine());
		nindex[nauswahl-1]=true;
	}
		else{
			Console::WriteLine("Die Kiste mit der Nummer {0} gibt es nicht! Bitte erneut eingeben: ",nauswahl);
		}
neu(nindex);
};

Wo is mein Denkfehler? Als Bedingung für den if-Teil habe ich geschrieben, dass die Eingabe kleiner oder gleich 100 sein muss, was ganz gut funktioniert. Der zweite Teil der Bedingung allerdings macht Probleme. Ich kann nur für ein paar wenige Kisten Daten eingeben, ansonsten wird zum else-Teil gesprungen. Aber wieso?
 
Zuletzt bearbeitet:
Hi !

Was du verbessern solltest :

1. Du solltes abfragen ob nauswahl größer 0 ist sonnst kann es
dir passieren das du auf falsche Stellen zugreifst. Und du kommst
nie in deinen else Teil rein, außer bei > 100
2. Du schreibst deine Daten in lokale Variablen die sind weg sobald
die Funktion beendet wird. Ist das absicht?
3. Du hast keine Abbruchbedingung für deine Rekursion
4. Den Aufruf von neu im else Teil kannst du dir sparen, da er direkt da nach
ebenfals kommt.

Deinen geschilderten Fehler kann ich auch nciht nachvollziehen, aber änder
die oben genannten Sachen und schau dann noch mal.

Gruß Benny
 
thx für die Antwort.

Der Code is eben noch sehr früh. Wollte erst mal probieren, ob ich es hinkrieg, die Nummer der Kiste net doppelt belegen zu können. Aber so wie's aussieht klappt es net.
Wie ich das mit Länge, Höhe und Breite mach, weiß ich noch net. Ja, es is in lokalen Variablen. Aber ich muss die Struktur für Länge, Höhe und Breite in der main-Funktion vereinbaren. Werd da wohl einiges an der Funktion ändern müssen..so viele Werte zum Zurückgeben..:/ egal, das kommt später.

Die Kisten 1, 2 und 4 kann ich net benutzen. Bei denen wird zum else-Teil gesprungen. Aber weshalb? Es könnte doch höchstens sein, dass der Boolean-Wert auf true gesetzt wurde. Aber das wird er nirgends. Wie kommt das?
 
Nope, hab's net initialisiert. Soweit ich weiß werden nicht-initalisierte bool'sche Datenträger mit false initialisiert, daher hab ich als Bedingung, dass die Kiste auf false sein muss, und nach der Eingabe der Daten wird die Kiste dann auf true gesetzt.
 
Bei C/C++ wird NICHTS initialisiert. Geh einfach immer davon aus, dass da bei Variablen/Arrays direkt nach der Deklaration Müll drinsteht.
 
Oh...okay. Hab den Fehler behoben mit
Code:
for (Int32 i = 0; i<=100; i++)
         nindex[i] = false;

Das klappt. Oder hab ich übersehen, dass man alle Index eines Feldes auf ein Mal initialisieren kann? Denk net.... Danke für eure Hilfe.
 
Geht leider nicht auf einmal soweit ich weis.

Allerdings schreibst du über dein Feld hinaus!
Es muss < und nicht <= 100 heißen.

Benny
 
Ne, das passt. Alle Kistennummern, die kleiner als 100 sind und die 100 selbst sind false. Es gibt ja 100 Kisten, und net 99.
 
Oh...okay. Hab den Fehler behoben mit
Code:
for (Int32 i = 0; i<=100; i++)
         nindex[i] = false;

Das klappt. Oder hab ich übersehen, dass man alle Index eines Feldes auf ein Mal initialisieren kann? Denk net.... Danke für eure Hilfe.

XtremeCJ hat gesagt.:
Ne, das passt. Alle Kistennummern, die kleiner als 100 sind und die 100 selbst sind false. Es gibt ja 100 Kisten, und net 99.

Bei deinem Beispiel sind es aber 101 Kisten die du initialisieren willst und das passt
eben nicht.

Gruß,
RedWing
 

Neue Beiträge

Zurück