C++ IF Abfragen Problem

Abcd12345

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

Ich übe grade den Umgang mit If Abfragen in CSS und probiere dabei einige Sachen aus damit sich das bisher erlangte Wissen festigt.

Bei der jetzt von mir gemachten Abrage gibt es jedoch einen Fehler, bei dem ich nicht weiß wo durch er bedingt ist und wie ich ihn vermeide.

Vollgender Fehler:

C:\Program Files\Microsoft Visual Studio\MyProjects\if\da.cpp(20) : error C2676: Binaerer Operator '<<' : 'class std::basic_istream<char,struct std::char_traits<char> >' definiert diesen Operator oder eine Konvertierung in einen fuer den vordefinier
ten Operator geeigneten Typ nicht



Code:
// if abfragen üben

#include <iostream>

using namespace std;

//main

int main ()

{
	//vari

	int einkommen = 0;
	char ch_geldfrage;
	
	//Fragen ob er geld verdient

	cout << "Verdeinst du geld? ja(j) nein(n) ";
	cin << ch_geldfrage;
	
	if(ch_geldfrage == 'n')

	{
		cout << "Dann arbeite doch mal" << endl;
	}
	else if (ch_geldfrage == 'j')
	{
		cout << "Wieviel Geld verdienst du? ";
		cin >> einkommen;

	//einkommen abfragen

		if (einkommen == 0)
		{
			cout << "hmm? Das macht keinen Sinn..." << endl;
		}
		else if (einkommen <= 100)
		{
			cout << "Das ist ja fast nix.." << endl;
		}
		else if (einkommen <= 1000)
		{
			cout << "Kannst du damit überleben?" << endl;
		}
		else if (einkommen <= 2000)
		{
			cout << "Joar das ist ja schonmal was" << endl;
		}
		else if (einkommen <= 3000)
		{
			cout << "Soviel würde ich auch gerne verdienen" << endl;
		}
		else  
		{
			cout << "Das glaub ich dir nicht" << endl;
		}
	}
	else
	{
	cout << "hmmm?" << endl;
	}

return 0;

}

Würde mich über Hilfe freuen :)
 
AW: C++ IF Abfragen Problem

Hallo,

bei cin musst du die operatoren umkehren d.h. so:

Code:
[...]
cin>>wert;
[...]

Beim ersten cin hast du es wahrscheinlich nur vergessen, denn anschließend passt es...
 
AW: C++ IF Abfragen Problem

Danke für die schnell Antwort :)

Noch ne kleine Frage:

Wieviel Zeichen Text kann eine "Char" Variabel maximal annhemen?

Ich weiß nur das die 1 byte groß ist und damit eine Zahl des Wertebereichs von 0-255 einspeichern kann, jedoch weiß ich nicht wieviel Textzeichen das entspricht..
 
AW: C++ IF Abfragen Problem

Hallo,

char var;

kann genau ein Zeichen annehmen, ansonsten musst du ein char-Array erstellen, welches n Zeichen annehmen kann:

char var[n];

Du kannst dann z.B. mit sprintf(var,"hallo hallo %i",intvar); irgendwas reinspeichern, wobei du natürlich immer aufpassen musst, dass du nicht mehr Zeichen reinspeicherst, als das Array Stellen hat...

mfg
mitos
 
AW: C++ IF Abfragen Problem

Statt den vielen else-if Zweigen könnte man vielleicht auch über die Verwendung eines switch-case Blocks nachdenken. Vorausgesetzt natürlich, dass man die kleiner-gleich Abfragen elegant unterbringen kann, sonst wärs zu Aufwändig. Geht sowas?

Gruß,
sam
 
Zuletzt bearbeitet:
AW: C++ IF Abfragen Problem

Nein, mit einer switch-Anweisung kann man nur "Ganzzahlen" auf Gleichheit prüfen. Die vielen if-Abfragen sind also leider durchaus berechtigt.

ph4nt0m
 
AW: C++ IF Abfragen Problem

nein, denn er verwendet eine char-Variable, also ein einzelnes Zeichen von 0-255, deshalb könnte man auch switch-case verwenden...

mfg
mitos
 
AW: C++ IF Abfragen Problem

Es geht wohl eher um das Einkommen. Und da dort mit größer/kleiner verglichen wird geht switch/case nicht.
 
AW: C++ IF Abfragen Problem

Danke, ganz genau...
 
AW: C++ IF Abfragen Problem

Habs auch nochmal ausprobiert mit cases geht dann nur so:

Code:
// if abfragen üben

#include <iostream>

using namespace std;

//main

int main ()

{
	//vari

	int einkommen = 0;
	char ch_geldfrage;
	
	//Fragen ob er geld verdient

	cout << "Verdeinst du geld? ja(j) nein(n) ";
	cin >> ch_geldfrage;
	
	if(ch_geldfrage == 'n')

	{
		cout << "Dann arbeite doch mal" << endl;
	}
	else if (ch_geldfrage == 'j')
	{
		cout << "Wieviel Geld verdienst du? ";
		cin >> einkommen;

	//einkommen abfragen

		switch (einkommen)
		{

			case (0):
			{
				cout << "hmm? Das macht keinen Sinn..." << endl;
			}
			case (100):
			{
				cout << "Das ist ja fast nix.." << endl;
			}
			case (1000):
			{
				cout << "Kannst du damit überleben?" << endl;
			}
			case (2000):
			{
				cout << "Joar das ist ja schonmal was" << endl;
			}
			case (3000):
			{
				cout << "Soviel würde ich auch gerne verdienen" << endl;
			}
			default:
			{
				cout << "Das glaub ich dir nicht" << endl;
			}
		}
	}
	else
	{
	cout << "hmmm?" << endl;
	}

return 0;

}


Ist wohl nicht ganz so sinvoll, weil ja jetzt nur noch ganz bestimte Fälle abgefragt werden können...

Aber ich konnte wenigstens nochmal den Umgang mit switches üben ;)
 
AW: C++ IF Abfragen Problem

Ich hab wohl ph4nt0m's Aussage missverstanden, ich war der Ansicht, dass er meinte, switch-case könnte nicht mit char's umgehen und wollte eigentlich nur das klarstellen...
Aber dass nur auf Gleichheit überprüft werden kann ist natürlich korrekt...
Und wie Abcd12345 schrieb deshalb hier auch nicht ganz sinnvoll... ;)

mfg
mitos
 
Zuletzt bearbeitet:
AW: C++ IF Abfragen Problem

Kein Problem, ich habe das "Ganzzahlen" daher extra in Anführungszeichen gesetzt, denn obwohl char ja eigentlich nicht als Ganzzahltyp gesehen wird, funktioniert es da natürlich auch. Aber letztendlich ist char == BYTE und man kann (zumindest in C(++)) daher in einer Variable des Typs char auch durchaus Zahlen aus dem entsprechenden Wertebereich ablegen.

ph4nt0m
 
AW: C++ IF Abfragen Problem

Ich wundere mich grade das ihm noch keiner gesagt hat das man bei Variablen Unterstriche vermeiden sollte:rolleyes:
 
AW: C++ IF Abfragen Problem

Im Buch, dass ich grade lese beginnen die Variablen meist mit 1-2 kleinen Buchstaben die den Datentyp beschreiben und gehen dann weiter mit dem eigentlichen Namen der variabel, wobei diese dann mit einem Großbuchstaben beginnen.

Das ganze sieht dann so aus:

chAuswahl (für char) oder fKommawert (für float)

Aus Gründen der Einfachheit wollte ich einfach die Variablen komplett klein schreiben, auch wenn ich mich damit von der gewählten Norm im Buch etwas abhebe. Allerdings wollte ich den Datentyp auch etwas hervorheben deswegen habe ich mich für den Unterstrich entschieden.

Wenn ich damit gegen irgendwelche allgemein gültigen Normen verstosse, werde ich mir natürlich eine andere schreibweiße angewöhnen, was ja jetzt noch nicht ganz so schwer sein wird.

Wie sieht denn die übliche Schreibweiße aus?

Wäre nett, wenn das hier nochmal jemand angeben könnte :)
 
AW: C++ IF Abfragen Problem

Hallo,

Natürlich kannst du deine Variablen grundsätzlich nennen wie du willst, allerdings ist diese spezielle Namensgebung von Variablen insofern sinnvoll, wenn du z.B. an einem Recht großen Projekt arbeitest, und auf irgendwelche Variablen zugreifen willst, behälst du durch diese Notation eher den Überblick und weißt sofort um welchen Typ es sich handelt, auch andere, die deinen Code eventuell betrachten, finden sich so leichter zurecht... Und es ist eigentlich Recht schnell angewöhnt, da man meist wie du schon sagst einfach den ersten oder die ersten beiden Buchstaben des Variablentyps dem Variablennamen voransetzt...

mfg
mitos
 
AW: C++ IF Abfragen Problem

Allerdings sagt selbst Microsoft welche die Ungarische Notation damals empfohlen haben, dass man diese heute nicht mehr verwenden sollte. Oft kann diese nämlich auch einfach nur mehr Verwirrung schaffen als sie hilft.

Zitat von Wikipedia
Kritiker der ungarischen Notation führen an, die Präfixe seien lediglich eine Art Kommentar. Erfahrungsgemäß veraltern Kommentare aber und werden nicht so gepflegt wie die tatsächliche Programmlogik, so dass Notation und tatsächliche Verwendung irgendwann nicht mehr zusammenpassen.

Weiterhin erschwere die Ansammlung von kryptischen Abkürzungen die Lesbarkeit des Codes. Insbesondere in objektorientiertem Code bringen die Präfixe keinen Informationsgewinn.

Die Ungarische Notation sei besonders vorteilhaft für nicht streng-typisierte Sprachen wie C, für die sie ursprünglich entwickelt wurde. Für moderne, objektorientierte Hochsprachen wie Java oder C# ist sie nicht mehr von so großer Bedeutung. Microsoft empfiehlt für das neue .NET-Framework, die ungarische Notation nicht mehr einzusetzen.
 
Zurück
Oben