C++ für Dumies Prob

Diskutiere C++ für Dumies Prob im Developer Network Forum im Bereich Hardware & Software Forum; Einen anderen Datentyp nehmen. ;) z.B. nur ein Zeichen einlesen als char.
  • C++ für Dumies Prob Beitrag #141
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Einen anderen Datentyp nehmen. ;) z.B. nur ein Zeichen einlesen als char.
 
  • C++ für Dumies Prob Beitrag #142
A

Airfighter76

Bekanntes Mitglied
Dabei seit
01.04.2009
Beiträge
268
Reaktionspunkte
0
Hmm ja das ist hier wohl die einzige Möglichkeit, dann muss ich aber noch reinschreiben, dass nur eine Anzahl von Zeichen eingegeben werden und einen Schutz fals dies nicht der Fall ist. Ist auch Sinnvoller weil es ist doch bestimmt ungewöhnlich wenn sich jemand einen Namen mit 500 Zeichen gibt.

Edit: Ich hab es jetzt ausprobiert funkt aber trotzdem net. Fehler: error C2051: case-Ausdruck ist keine Konstante. Habe auch schon zwischen case und Spieler1 << gesetzt, aber da kommt dann Syntaxfehler was soll ich tun?
 
Zuletzt bearbeitet:
  • C++ für Dumies Prob Beitrag #143
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Naja, die Fehlermeldung besagt, dass das, was hinter case steht, nicht konstant ist. Also solltest du dagegen was unternehmen. ;) Dein Problem ist einfach, dass switch für diese Anwendung nicht gedacht ist. Die case-Statements müssen konstante Werte sein; z.B. Integer-Zahlen.
Wenn du Variablen mit anderen Variablen vergleichen willst brauchst du ein if; z.B. in einer Schleife.

PS: Einfach auf gut Glück irgendwo Operatoren hinzusetzen funktioniert in so ziemlich keiner Programmiersprache.
 
  • C++ für Dumies Prob Beitrag #144
A

Airfighter76

Bekanntes Mitglied
Dabei seit
01.04.2009
Beiträge
268
Reaktionspunkte
0
Lol du bist ja cool drauf ^^. Ich hab jetzt noch bissel weitergegoogelt und versuchs jetzt mal mit if - else - elseif Schleifen wenn ich nix mehr sage funkts.
 
  • C++ für Dumies Prob Beitrag #145
A

Airfighter76

Bekanntes Mitglied
Dabei seit
01.04.2009
Beiträge
268
Reaktionspunkte
0
Ok es funkt und hier noch was was ich gefunden hab, damit Umlaute möglich sind.

Code:
		const unsigned char AE = static_cast<unsigned char>(142);
		const unsigned char ae = static_cast<unsigned char>(132);
		const unsigned char OE = static_cast<unsigned char>(153);
		const unsigned char oe = static_cast<unsigned char>(148);
		const unsigned char UE = static_cast<unsigned char>(154);
		const unsigned char ue = static_cast<unsigned char>(129);
		const unsigned char ss = static_cast<unsigned char>(225);
 
  • C++ für Dumies Prob Beitrag #146
A

Airfighter76

Bekanntes Mitglied
Dabei seit
01.04.2009
Beiträge
268
Reaktionspunkte
0
So ich habe mal wieder ein Problem und zwar tritt bei mir beim Debugen in Visual C++ 2008 folgender Fehler auf:
warning C4018: '<': Konflikt zwischen 'signed' und 'unsigned'

Der Code an dieser Stelle lautet
Code:
							if(iSpieler1feldnummervorwurf < (iSpieler1anfang -1) && iSpieler1würfelspeicher > (iSpieler1anfang -1))

die Variablen sind int und unsigned int. Ich kam schon auf die Idee einfach von alle Variablen das unsigned wegzumachen nur dann kommen mehr Fehler. p.s. ich poste nicht den ganzen Code sondern nur Ausschnitte, da das Arbeit von über ner Woche (aber noch nicht fertig) ist und nicht grad einfach war. Für Intressierte es wird ein Menschärgere dich nicht, was ich wenn es fertig ist als Open Source irgendwo hochladen werde (aber nicht den Code!).

Edit: Er ist im Moment 256 Zeilen lang.
 
  • C++ für Dumies Prob Beitrag #147
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
Muss denn beim Mensch-Ärgere-Dich-Nicht eine Variable negativ sein? Mach alle Variablen "unsigned"! Dann sollte es keinen Konflikt mehr zu geben. Du könntest auch vor alle "signed" Int-Variablen ein "(unsigned)" machen.
 
  • C++ für Dumies Prob Beitrag #148
T

TrµMAn

Bekanntes Mitglied
Dabei seit
23.10.2006
Beiträge
4.882
Reaktionspunkte
2
Ort
Wuppertal
Für Intressierte es wird ein Menschärgere dich nicht, was ich wenn es fertig ist als Open Source irgendwo hochladen werde (aber nicht den Code!).

YMMD xD OMG ROFL LOL so viele smilies wie ich hier hin posten möchte gibbet garnicht xD ... scheiße ich krieg mich kaum noch ein xD

zu deinem "Fehler": Wenn du dir das nicht leisten kannst was Max vorschlägt (weil das irgendwie nochmal probleme woanders im code macht) dann würde ich dich bitten, mal die möglichen Werte deine Variablen zu posten. So dass man sieht, was hier überhaupt (logisch gesehen) verglichen wird. Ich kann mir unter "iSpieler1anfang -1" nicht grade viel vorstellen.
 
  • C++ für Dumies Prob Beitrag #149
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
Also ich glaube das sollte keine Probleme verursachen, denn beim Mensch-Ärgere-Dich-Nicht hab ich noch nie -5 gewürfelt... ;)
Ach ja: Was findest du denn an dem Beitrag so lustig? Also ich finde es super wenn sich ein Junger Mensch freiwillig ein Ziel setzt und dann auch mit Ausdauer versucht es zu erreichen.
Auslachen (oder über ihn lachen) finde ich da komplett fehl am Platz.
 
  • C++ für Dumies Prob Beitrag #151
A

Airfighter76

Bekanntes Mitglied
Dabei seit
01.04.2009
Beiträge
268
Reaktionspunkte
0
Danke Max aber das mit dem Code hat den Grund, das ich ihn als Arbeitsprobe für meine Bewerbung beilegen will und das man sieht, dass ich ihn nicht irgendwo aus dem Internet gezogen habe. Und ich hab sie alle jetzt mal auf unsigned gestellt und der Fehler tritt nichtmehr auf, muss jetzt nur noch kuken ob es mit dem ganzen Code harmoniert. Muss jetzt aber erst mal noch ein paar andere Fehler im Script ausbessernl und nochmal danke Max.
 
  • C++ für Dumies Prob Beitrag #152
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
Nochmal extra für dich hervorgehoben
Echt? Ach was du nicht sagst. Ist schon extremst lustig...

Danke Max aber das mit dem Code hat den Grund, das ich ihn als Arbeitsprobe für meine Bewerbung beilegen will und das man sieht, dass ich ihn nicht irgendwo aus dem Internet gezogen habe. Und ich hab sie alle jetzt mal auf unsigned gestellt und der Fehler tritt nichtmehr auf, muss jetzt nur noch kuken ob es mit dem ganzen Code harmoniert. Muss jetzt aber erst mal noch ein paar andere Fehler im Script ausbessern und nochmal danke Max.
Ja, gern geschehen. Gute Idee! Aber vorher 100-mal Korrektur lesen... ;)
 
  • C++ für Dumies Prob Beitrag #153
A

Airfighter76

Bekanntes Mitglied
Dabei seit
01.04.2009
Beiträge
268
Reaktionspunkte
0
So ich hab jetzt mal wieder ein neues "Problem". Und zwar bin ich grad dabei mein Programm (Menschärgere dich nicht) mit Methoden den Code anschaulicher zu gestalten. Und ich bin mir nicht sicher, ob ich 2 Variablenwerte zurückgeben kann und zwar der 1 an eine Variable und der 2. an eine wiederum andere Variable. Geht das? Wenn nicht muss ich 2 Methoden (manche sagen auch Funktionen dazu) drausmachen.
 
  • C++ für Dumies Prob Beitrag #154
U

UnimatrixZero

Bekanntes Mitglied
Dabei seit
27.06.2001
Beiträge
645
Reaktionspunkte
0
So ich hab jetzt mal wieder ein neues "Problem". Und zwar bin ich grad dabei mein Programm (Menschärgere dich nicht) mit Methoden den Code anschaulicher zu gestalten. Und ich bin mir nicht sicher, ob ich 2 Variablenwerte zurückgeben kann und zwar der 1 an eine Variable und der 2. an eine wiederum andere Variable. Geht das? Wenn nicht muss ich 2 Methoden (manche sagen auch Funktionen dazu) drausmachen.

Klar geht das. Das Stichwort heißt hier "Zeiger".

Code:
func(int *a, int *b)
{
*a = 3;
*b = 4;
}

func nimmt 2 Zeiger auf den Typ int. Nicht zu verwechseln mit folgendem.

*a im Code bedeutet soviel wie "Inhalt von". a ist ein Zeiger auf eine Variable vom Typ int. Mit *a greifst Du auf die int-Variable selbst zu.

Code:
int a = 1;
int b = 2;

func(&a, &b);

a ist jetzt 3 und b ist 4.

&a bedeutet: "Adresse von". Damit erzeugst Du einen Zeiger auf den Speicherplatz der Variablen a.
 
  • C++ für Dumies Prob Beitrag #155
A

Airfighter76

Bekanntes Mitglied
Dabei seit
01.04.2009
Beiträge
268
Reaktionspunkte
0
Juhu es funkt danke, ich melde mich warscheinlich wieder wenn es ums objektorientierte Programmieren geht oder evtl. auch vorher wenn ich verzweifle ^^.
 
  • C++ für Dumies Prob Beitrag #156
A

Airfighter76

Bekanntes Mitglied
Dabei seit
01.04.2009
Beiträge
268
Reaktionspunkte
0
Hmm beim einen hat es gefunkt nur bei meinem 2. funktioniert es nicht hier mal der Code.

Code:
		//Beginnenden Spieler erfassen
		void Beginner(string *sSpieler1, string *sSpieler2)
		{
			//Lokale Variablen
			string sBeginner;

			//Auswahl des Beginners
			cout << endl << "Name des Beginnenden Spielers: ";
			cin  >> sBeginner;

			// Abgleichen der Eingabe mit den Spielern
			if (sBeginner == sSpieler1)
			{

				cout << sSpieler1 << " bitte klicke auf w" << ue <<"rfeln um das Spiel zu starten" << endl;
			}   

			if (sBeginner == sSpieler2)
			{

				cout << sSpieler2 << " bitte klicke auf w" << ue <<"rfeln um das Spiel zu starten" << endl;
				*sSpieler2 = sSpieler1;
				*sSpieler1 = sBeginner;
			}   

			else
			{
				cout << "ung" << ue <<"ltiger Spielername" << endl;   

			}

		}

kann es evtl. daran liegen, dass es in einer Schleife ist?
 
  • C++ für Dumies Prob Beitrag #157
U

UnimatrixZero

Bekanntes Mitglied
Dabei seit
27.06.2001
Beiträge
645
Reaktionspunkte
0
kann es evtl. daran liegen, dass es in einer Schleife ist?
Ich sehe hier allerdings keine Schleife.

sBeginner ist ein string. sSpieler1 und sSpieler2 sind Zeiger auf string.
D.h. innerhalb dieser Funktion muss es immer *sSpieler1 und *sSpieler2, ABER sBeginner heissen.
 
  • C++ für Dumies Prob Beitrag #158
A

Airfighter76

Bekanntes Mitglied
Dabei seit
01.04.2009
Beiträge
268
Reaktionspunkte
0
sBeginner ist ein string. sSpieler1 und sSpieler2 sind Zeiger auf string.
D.h. innerhalb dieser Funktion muss es immer *sSpieler1 und *sSpieler2, ABER sBeginner heissen.

???, ich hab mal aus *sSpieler1 und *sSpieler2 einfach immer *sBeginner gemacht, aber es kam trotzdem ein Fehler.

Hmm ja die hab ich auch gar nicht mitgepostet ^^, die Schleife ist nämlich an der Stelle, an der ich die Methode eingebettet habe und dort steht folgendes.

Code:
		Einlesen (&sSpieler1, &sSpieler2);

        do
        {
				Beginner(&sSpieler1, &sSpieler2);

        }
        while (sBeginner != sSpieler1 && sBeginner != sSpieler2);

Weil ich möchte mit dem vorhin geschrienen, Code erreichen, dass die neuen Namen von sSpieler1 und sSpieler2 übernommen werden.
 
  • C++ für Dumies Prob Beitrag #159
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
sBeginner ist nur innerhalb der Methode Beginner definiert. In der geposteten Schleife ist diese Variable aber nicht bekannt. Warum machst du es dir eigentlich so kompliziert und gibst nicht einfach z.B. die Ziffern 1 oder 2 zur Auswahl? In einer while-Schleife prüfst du dann ähnlich deinem Ansatz einfach, ob die Eingabe 1 oder 2 ist; andernfalls wird die Schleife erneut durchlaufen. So kannst du einfach mit ints arbeiten und die Vergleiche mit konstanten Zahlen durchführen, anstatt mit Spielernamen in anderen Variablen.
 
  • C++ für Dumies Prob Beitrag #160
U

UnimatrixZero

Bekanntes Mitglied
Dabei seit
27.06.2001
Beiträge
645
Reaktionspunkte
0
???, ich hab mal aus *sSpieler1 und *sSpieler2 einfach immer *sBeginner gemacht, aber es kam trotzdem ein Fehler.

Wie cmddegi schon geschrieben hat, ist Dein Code etwas umständlich.

Du wirfst da einiges durcheinander. Ich würde Dir raten, Dich näher mit Zeigern zu beschäftigen. Z.B. hier: http://de.wikibooks.org/wiki/C-Programmierung:_Zeiger

Kurz: Innerhalb der Funktion "Beginner" sind sSpieler1 und sSpieler2 ZEIGER auf einen String. sBeginner ist ein String. Wenn Du also wissen möchtest, ob der String, auf den sSpieler1 zeigt und der String sBeginner gleich sind, dann muss der Vergleich lauten: *sSpieler1 == sBeginner

Wenn Du den String, auf den sSpieler1 zeigt, durch den String, auf den sSpieler2 zeigt, ersetzen willst, dann muss die Zuweisung lauten: *sSpieler1 = *sSpieler2

Um das ganze etwas durchschaubarer zu machen, solltest Du einem Zeiger immer ein kleines "p" voranstellen. Also pSpieler1 und pSpieler2. Damit siehst Du auf den ersten Blick, dass diese beiden Variablen ZEIGER ("P"ointer) sind.
 
Thema:

C++ für Dumies Prob

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.180
Beiträge
1.579.174
Mitglieder
55.879
Neuestes Mitglied
stonetreck
Oben