C++ && und || Operator

Abcd12345

Lt. Junior Grade
Registriert
März 2006
Beiträge
483
Hi,

Ich muss nochmal ne Frage zu diesen beiden Operatoren stellen. Ich dachte ja eigentlich das ich den Unterschied kennen würde weil sie in dem Buch das ich grade lese ganz gut dargestellt werden.


Bei einem Anwendungsbeispiel verstehe ich jetzt aber den Einsatz des && Operators nicht.

Auszug aus dem Code:
Code:
do {
	//Menü ausgeben
	cout "Zahlenraten - Menue"
	cout "-------------------"
	cout "(N)eues Spiel"
	cout "(L)evel waehlen"
	cout "(H)ighscore anzeigen"
	cout "(I)nfo"
	cout "(B)eenden\n\n"
	
	//Eingabe abfragen
	cout << "Auswahl :"
	cin >> auswahl;

	// Je nach eingabe verzweigen

	switch (auswahl)
	{
	
		//Neues Spiel starten
		case ('n'):
		case ('N'):
		{
			//Spielen
			int Punkte;
			Punkte = Spielen(Level);

			Highscore = testehighscroe(Punkte, highscroe)
		} break;
		
		//level wählen
		case ('l'):
		case ('L'):
		{
			level = waehlelevel(Level)

		} break;

		//Highscroe anzeigen
		case ('h'):
		case ('H'):
		{
			cout << "Der aktuelle Highscore liegt bei ";
			cout << highscroe << "Punkten\n\n";

		} break;

		//Zeige Infos
		case ('i'):
		case ('I'):
		{
			zeigeinfos()
		} break;

		//Spiel beenden?
		case ('b'):
		case ('B'):
		{
			cout << "Spiel beendet" endl;
		} break;


		//Falsche Eingabe
		default
		{
			cout << "Falsche Eingabe!\n\n" 
		}
		
	}
	


} while(auswahl != 'b' && auswahl != 'B'); // Spiel bennden?

Ich denke mal der Autor möchte sein Menü so lange laufen lassen möchte bis "b" oder "B" in die Char Variabel gespeichert wird.

Allerdings für dies müsste doch eigentlich der "||" Operator und nicht der "&&" Operator eingesetzt werden.

So wie es jetzt da steht, heißt es doch das die Variabel "auswahl" gleichzeitig "b" und "B " sein muss oder lieg ich da Falsch?
 
AW: C++ && und || Operator

Deine Vermutung sollte richtig sein(kann keine 100%ige aussagen machen, da ich noch nie c++ programmiert
habe)
Hast du das Programm schonmal kompiliert um zu sehen ob es funktioniert?

Grüße

krizzel
 
AW: C++ && und || Operator

Edit: Habe das Ausrufezeichen nicht gesehen Mist
 
Zuletzt bearbeitet: (Schwachsinn geschreiben ^^)
AW: C++ && und || Operator

Nein das stimmt so.

while auswahl != 'b' && auswahl != 'B'
wenn kein b oder B eingespeichert ist:
--> while true && true --> true --> while(true), laeuft durch
jedoch wenn z.b. b eingespeichert ist:
--> while false && true --> false --> while(false), bricht ab

Ein && benoetigt 2 'true' um 'true' zu werden, sonst wird es 'false'.
Ein || benoetigt nur ein 'true' um 'true' werden, wird nur 'false' wenn beide Eingaenge auf 'false' stehen.

In dem Beispiel haette man jedoch kein || verwenden koennen, hier das Beispiel:

while auswahl != 'b' || auswahl != 'B'
wenn kein b oder B eingespeichert ist:
--> while true || true --> true --> while(true), laeuft durch
jedoch wenn man b einspeichert:
--> while false || true --> true --> while(true), laeuft durch --> Nicht der gewuenschte Effekt! Ausgang der while-Schleife unmoeglich, da auswahl nie b und B gleichzeitig sein kann.
 
Zuletzt bearbeitet:
AW: C++ && und || Operator

Hallo,

Code:
[...]
} while(auswahl != 'b' && auswahl != 'B');

Also, nehmen wir an die Eingabe ist 'b', dann geht er zur Abfrage hier und beginnt:

Ist 'b' != 'b' --> FALSE
Ist 'b' != 'B' --> TRUE

also FALSE && TRUE heißt folglich Abbruch, da beide TRUE sein müssten um weiterzulaufen...

wäre ein || (oder), würde er weitermachen, und die Schleiße wäre endlos, da bei einem 'b' die Ausage 'b' != 'B' zutreffen würde und bei 'B' die Aussage 'B' != 'b' ...

mfg
mitos
 
AW: C++ && und || Operator

Hi,

die Schleife wird verlassen wenn 'b' oder 'B' eingegeben wird und in der Bedingung steht die Negation davon (wir machen weiter solange nicht einer der beiden Buchstaben eingegeben wird). Nun schau dir diesen Artikel an http://de.wikipedia.org/wiki/Augustus_De_Morgan un es sollte alles klar sein
 
AW: C++ && und || Operator

Es passt schon so, wie es in dem Beispiel aufgeführt ist, da der Autor ja das ungleich als Vergleichsoperator ( != ) nimmt. Der Ausdruck ist also solange wahr wie weder 'b' noch 'B' eingegeben wurden.
Man könnte es natürlich auch mit dem ||-Operator machen, dann müsste man aber den ganzen Ausdruck negieren:

while !(auswahl = 'b' || auswahl = 'B')


hth
 
AW: C++ && und || Operator

Aber dann bitte mit richtigem Syntax ;)

Code:
while([b]![/b](auswahl [b]==[/b] 'b' || auswahl [b]==[/b] 'B'));
 
AW: C++ && und || Operator

Abcd12345 schrieb:
So wie es jetzt da steht, heißt es doch das die Variabel "auswahl" gleichzeitig "b" und "B " sein muss oder lieg ich da Falsch?
Auch wenn es andere schon beantworet haben:
da steht jetzt, dass die Variable auswahl gleichzeitig nicht "b" und auch nicht "B" ist, also weder "b" noch "B".
 
AW: C++ && und || Operator

Noch eine Nebenbemerkung:
aufpassen das es auch immer 2 zeichen sind also && und || und nicht nur & oder |, denn dann waeren das Bitoperatoren und sobald ein ergebniss != 0 rauskommt immer true
 
AW: C++ && und || Operator

Mal wieder vielen dank für die schnelle und kompetente Hilfe :)


Ich habe jetzt das ganze Anwendungsbeispiel abgetippt und habe alle Fehler bis auf einen berichtigen können. Nun ist die Frage, was ich Falsch gemacht habe, weil ich mir ziemlich sicher bin, dass es genauso aussieht wie in der Vorlage.


Code:
//Zahlenraten

#include <iostream>
# include <windows.h>


using namespace std;

#pragma comment (lib, "winmm.lib")

//Funktionsprototypen

int spielen (int level);
int waehlelevel (int level);
int testehighscroe (int punkte, int highscroe);
void zeigeinfos ();

//main

int main ()

{

//vari
char auswahl; // Gewählter Menüpunkt
int level = 5;
int highscroe = 100;

//Zufallsgenerator initaliesieren
strand (timeGetTime());


//Verarbeitung des Menüs

do {
	//Menü ausgeben
	cout <<	"Zahlenraten - Menue";
	cout << "-------------------";
	cout <<	"(N)eues Spiel";
	cout <<	"(L)evel waehlen";
	cout <<	"(H)ighscore anzeigen";
	cout <<	"(I)nfo";
	cout <<	"(B)eenden\n\n";
	
	//Eingabe abfragen
	cout << "Auswahl :";
	cin >> auswahl;

	// Je nach eingabe verzweigen

	switch (auswahl)
	{
	
		//Neues Spiel starten
		case ('n'):
		case ('N'):
		{
			//Spielen
			int punkte;
			punkte = spielen(level);

			highscroe = testehighscroe(punkte, highscroe);
		} break;
		
		//level wählen
		case ('l'):
		case ('L'):
		{
			level = waehlelevel(level);

		} break;

		//Highscroe anzeigen
		case ('h'):
		case ('H'):
		{
			cout << "Der aktuelle Highscore liegt bei ";
			cout << highscroe << "Punkten\n\n";

		} break;

		//Zeige Infos
		case ('i'):
		case ('I'):
		{
			zeigeinfos();
		} break;

		//Spiel beenden?
		case ('b'):
		case ('B'):
		{
			cout << "Spiel beendet" << endl;
		} break;


		//Falsche Eingabe
		default:
		{
			cout << "Falsche Eingabe!\n\n";
		}
		
	}
	


} while(auswahl != 'b' && auswahl != 'B'); // Spiel bennden?

cout << "Bis zum naechsten Mal" << endl;

return 0;

} //main


//Funktionen

void zeigeinfos()
{
	cout << "Infotext \n\n";
} //Zeige Infos

// WaehleLevel
int waehlelevel(int level)
{
	int neuerLevel;

	do {
			//Neuer Level
			cout << "Aktueller Level: " << level << endl;
			cout << " Neuer Level (1 - 10) ";
			cin >> neuerLevel;

			if (level < 1 || level > 10 )
			{
				//Fehlermeldung
				cout << "ungültiger levelwert" << endl;
			}
	} while(level < 1 || level > 10);

	return neuerLevel;
}

//Spielen
//
// Aufgabe das eigentliche Spiel spielen
//

int spielen (int level)
{
	int zufallszahl;
	int geratenezahl = 0;
	int bereich = level * 10;
	int versuche = 0;
	int punkte = 0;


	// zufallszahl ermitteln
	zufallszahl = (rand()%bereich)+1;

	//Ratebereich

	cout << "\nDie gesuchte Zahl liegt zwischen 1 und ";
	cout << bereich << endl;

	//So lange raten bis Zahl gefunden wurde
		while (geratenezahl =! zufallszahl)
		{
			cout << "Dein Tip ";
			cin >> geratenezahl;

			versuche++;

			// Zahl stimmt nicht --> Hinweiß

			if (geratenezahl < zufallszahl)
			{
				cout << "Die gesuchte Zahl ist größer" << endl;
			}
			if (geratenezahl > zufallszahl)
			{
				cout << "Die gesuchte Zahl ist kleiner" << endl;
			}
		}

	//Zahl wurde erraten

	cout << "\nGeschafft ! " << endl;
	cout << "Du hast die Zahl nach " << versuche;
	cout << "Versuchen erraten !\n\n";

	//Punkte berechnen..

	punkte = bereich - versuche + 1;
	punkte *= level;

	// Punkte dürfen "nicht" negativ sein

	if (punkte < 0)
		punkte = 0;

	cout << "Punkte: " << punkte << endl;

	//punkte zurückgeben
	
	return punkte;

}//spielen


//Teste Highscore
int testehighscroe(int punkte, int highscore)
{

	//Prüfen ob der Highscore geknackt wurde

	if (punkte > highscore)
	{
		cout << "Glückwunsch neuer Highscore\n\n";
		highscore = punkte;
	}
	else
	{
		cout << "Leider kein neuer Highscore\n\n";
	}

	//Highscore zurückgeben
	return highscore;

}

Das ist der Fehler:

C:\Program Files\Microsoft Visual Studio\MyProjects\zahlengame\lala.cpp(30) : error C2065: 'strand' : nichtdeklarierter Bezeichner
Fehler beim Ausführen von cl.exe.

Ich würde mich freuen, wenn jemand sagen könnnte, wo mein Fehler liegt :)
 
AW: C++ && und || Operator

Der Zufallsgenerator hat nichts mit dem Strand zu tun ;)

Initialisieren tut man den mit srand.
 
Zurück
Oben