Frage Array

03/19/2014 18:38 KingwondA#1
Heey,
ich wollte Fragen warum ein Level-- zur Index Korregatur an die jeweilige Stelle hingehört.

Wird mit dem Level-- nur noch von 0 bis 4 gezählt oder wie??
- Also Passe ich das Level dem Array an -

Code:
Code:
#include <iostream>

using namespace std;

// Hauptprogramm
//
int main ()
{
	// Variablen
	//
	int Bonus[5];
	int Level;

	// Bonuspunkte für jeden Level festlegen
	Bonus [0] = 100;
	Bonus [1] = 150;
	Bonus [2] = 250;
	Bonus [3] = 400;
	Bonus [4] = 600;

	// Level abfragen
	do
	{
		cout << "Welcher Level: ";
		cin >> Level;
	} while (Level < 1 || Level > 5);

	// Bonuspunkte anzeigen
	 Level--;  // Index korrigieren

	cout << "Bonuspunkte: " << Bonus[Level] << endl;

	return 0;
}
03/19/2014 19:07 qkuh#2
Level-- := (Level = Level-1)

Also ja.
03/19/2014 19:08 ​Tension#3
Quote:
Originally Posted by KingwondA View Post
Wird mit dem Level-- nur noch von 0 bis 4 gezählt oder wie??
- Also Passe ich das Level dem Array an -
Ja sonst würdest du ja von 1 - 5 Zählen jedoch fangen Arrays bei 0 an.
03/19/2014 23:44 KingwondA#4
Danke, ich wollte nur noch mal auf Nummer sicher gehen :)
Nicht dass ich mir was falsches anlerne.
03/20/2014 16:38 Elektrochemie#5
Code:
	// Level abfragen
	do
	{
		cout << "Welcher Level: ";
		cin >> Level;
	} while (Level < 1 || Level > 5);
der Code Teil macht absolut keinen Sinn.
Du benutzt eine while schleife als if abfrage, die allerdings erst anschließend abgefragt wird?
Sollte das Level (warum auch immer) bei niedriger als 1 oder höher als 5 sein, endet das ganze in einer endlos schleife.

Ich denke folgendes war dein Plan...

Code:
#include <iostream>

using namespace std;

// Hauptprogramm
//
int main ()
{
	// Variablen
	//
	int Bonus[5];
	int Level;

	// Bonuspunkte für jeden Level festlegen
	Bonus [0] = 100;
	Bonus [1] = 150;
	Bonus [2] = 250;
	Bonus [3] = 400;
	Bonus [4] = 600;

	// Level abfragen
	if(Level >= 1 && Level <= 5)
	{
		cout << "Welcher Level: ";
		cin >> Level;
		
		// Bonuspunkte anzeigen
		//Macht keinen Sinn Level zu reduzieren, ansonsten müsstest du es auch wieder erhöhen
		//cout << "Bonuspunkte: " << Bonus[(Level - 1)] << endl;
		Level--;
		cout << "Bonuspunkte: " << Bonus[Level] << endl;
		Level++; //Korrektur

	}else
	{
		//Level ausshalb des array bereichs
	}

	return 0;
}
03/20/2014 17:10 th0rex#6
Quote:
Originally Posted by Elektrochemie View Post
Code:
	// Level abfragen
	do
	{
		cout << "Welcher Level: ";
		cin >> Level;
	} while (Level < 1 || Level > 5);
der Code Teil macht absolut keinen Sinn.
Du benutzt eine while schleife als if abfrage, die allerdings erst anschließend abgefragt wird?
Sollte das Level (warum auch immer) bei niedriger als 1 oder höher als 5 sein, endet das ganze in einer endlos schleife.
Nope. Seins macht Sinn (im Gegensatz zu deinem) und endet nicht in einer Endlosschleife außer der Nutzer ist so dumm und gibt immer wieder etwas was niedriger als 1 oder höher als 5 ist (und das ist dann auch keine Endlosschleife). So wie er es hat hat der Nutzer keine andere Möglichkeit als etwas zwischen 1 und 5 einzugeben (was wahrscheinlich sein Ziel war). Das die erst anschließend abgefragt wird macht auch Sinn weil Level sonst bei der ersten Abfrage einfach nix ist. Lern doch bitte selbst erstmal die Sprache (oder vielleicht überhaupt wie man programmiert und wie man arrays benutzt) bevor du hier Leute verbessern möchtest.

Edit: Habe mir deins nochmal angeguckt und meine Kommentare hinzugefügt (und deine entfernt).
Quote:
Originally Posted by Elektrochemie View Post
Code:
#include <iostream>

using namespace std;


int main ()
{

	int Bonus[5];
	int Level;


	Bonus [0] = 100;
	Bonus [1] = 150;
	Bonus [2] = 250;
	Bonus [3] = 400;
	Bonus [4] = 600;


	if(Level >= 1 && Level <= 5) // immer false weil level standartmäßig 0 ist. GJ
	{
// auch schön das man erst guckt was das level ist und dann das level abfragt. Logic FTW.
		cout << "Welcher Level: ";
		cin >> Level;

//natürlich macht es Sinn das Level zu reduzieren sonst lässt er das 0. Element von der Array ungenutzt.		
		Level--;
		cout << "Bonuspunkte: " << Bonus[Level] << endl;
		Level++; //Korrektur // <- WARUM ? Er kann doch Level-- so lassen, falls er das später nochmals als index braucht. Nur wenn er es dem Nutzer ausgibt muss er +1 rechnen. Ist aber immer noch besser in einer Funktion die z.B. printLevel() heißt das einmal + 1 zu rechnen anstatt immer Level-- und Level++ oder zur indexierung immer Bonus[Level-1] zu schreiben.

	}else{/*blablabla... wird btw immer ausgeführt...*/}
	return 0;
}
03/20/2014 17:42 Tasiro#7
Quote:
Originally Posted by omitma View Post
Code:
if(Level >= 1 && Level <= 5) // immer false weil level standartmäßig 0 ist. GJ
Es ist sogar noch schlimmer: Das ist undefiniertes Verhalten, der Compiler darf die Festplatte formatieren. Nicht initialisierte Variablen dürfen nicht gelesen werden. Nur statische und globale Variablen werden mit einem Standardwert gefüllt.
03/20/2014 17:50 Schlüsselbein#8
Ich warte immernoch auf den Tag an welchem zB Microsoft wirklich undefiniertes Verhalten implementiert so ganz im Sinne von hier und da mal was löschen, neuen Benutzer anlegen, Hintergrund ändern, Musik abspielen, die Maus spiegeln etc.
Hätte sogar lerneffekt.
03/20/2014 17:51 MrSm!th#9
Quote:
Originally Posted by Elektrochemie
//Macht keinen Sinn Level zu reduzieren, ansonsten müsstest du es auch wieder erhöhen
//cout << "Bonuspunkte: " << Bonus[(Level - 1)] << endl;
Gut, dass du den eigentlichen Inhalt dieses Threads nicht einmal gelesen hast. Ansonsten hättest du sogar etwas gelernt. Da steht nämlich schon, warum das seine Richtigkeit hat.
03/20/2014 21:54 Elektrochemie#10
Immer mit der Ruhe, hatte übersehen / nicht realisiert dass der Spieler das Level eintippt.
03/21/2014 13:26 Tyrar#11
Quote:
Originally Posted by Elektrochemie View Post
Immer mit der Ruhe, hatte übersehen / nicht realisiert dass der Spieler das Level eintippt.
Dennoch ergibt sich daraus keine Erklärung jemandem der (anscheinend) noch weit am Anfang der Sprache ist einen solchen Code vor zu setzen. Der Code des TE ist 100% korrekt, stilistische Dinge außen vor gelassen.

Um da noch etwa zu sagen:
Das Array könnte man auch anders initialisieren
Code:
const int Bonus[5] = {
    100,
    150,
    250,
    400,
    500
};
macht aber hier keinen besonderen Unterschied, außer, dass es ein wenig Schreibarbeit abnimmt :)
Ich persönlich präferiere auch die Usereingaben zu lassen wie sie sind und Änderungen wenn nötig in einer extra Variable zu speichern. In diesem Fall wäre ich aber mit
Code:
cout << "Bonuspunkte: " << Bonus[Level - 1] << endl;
da ran gegangen.

Das einzige was mich aber an diesem Thread wundert ist, dass sich noch niemand über das "using namespace std;" beschwert hat. Dann hole ich das jetzt nach: das ist ganz böse! :D
03/21/2014 17:18 Elektrochemie#12
Quote:
Originally Posted by Tyrar View Post
Dennoch ergibt sich daraus keine Erklärung jemandem der (anscheinend) noch weit am Anfang der Sprache ist einen solchen Code vor zu setzen. Der Code des TE ist 100% korrekt, stilistische Dinge außen vor gelassen.
... wenn man, wie ich bereits geschrieben hatte, davon ausging dass das Level übergeben wurde und nicht per cin eingetippt wird, ergibt der Code schon Sinn.
Aber darauf hätte man, ausgehend von meinem Code, auch nicht draufkommen können, wa?
Ersetzt man das cin >>´durch ein cout << und übergibt den Wert, macht das alles Sinn, holy shit. :eek:
Bis auf die inkrementierung und dekrementierung, aber ist ja nicht so als hätte ich genau das gleiche wie du ( cout << "Bonuspunkte: " << Bonus[Level - 1] << endl; ) ausgekommentiert (damit er nicht verwirrt) geschrieben.
Welches dann natürlich vom lieben omitma rausgelöscht wurde, nur damit er dann die Inkrementierung ankreiden kann. Herrlich.

Wie man nur aus jedem noch so kleinem Fehler die Scheisse rausflamen kann. Epvp at its best <3

Quote:
Originally Posted by omitma View Post
Lern doch bitte selbst erstmal die Sprache (oder vielleicht überhaupt wie man programmiert und wie man arrays benutzt) bevor du hier Leute verbessern möchtest.
Lustiges Kerlchen bist du. Meld dich wenn ein Spiel von dir bei Steam Greenlight bekommt, dann reden wir weiter :)
03/21/2014 17:41 MrSm!th#13
Schwanzvergleich hard?
Ich denke hier ist alles geklärt.