Ich habe, weil es eine Übungsaufgabenstellung in einem Tutorial war, dieses Münzenspiel programmiert. Es werden halt immer abwechselnd Münzen gezogen und wer die letzte zieht hat gewonnen.
Nur leider geht es bei mir irgendwie auf einmal nicht weiter, nachdem ich eingegeben hab, mit wie vielen Münzen gespielt werden soll.
Das ganze is passiert, nachdem ich die Funktion, wo der Spieler zieht ausgelagert hab, um einfacher zu überprüfen, ob die Zahl, die der Spieler eingegeben hat zu hoch oder zu tief ist...
Hier dann mal den Source:
PHP Code:
#include "StdAfx.h"
#include <iostream>
#include <Windows.h>
using namespace std;
int computer(int muenzen_anzahl)
{
int muenzen_gezogen=muenzen_anzahl%4;
if (muenzen_anzahl%4==0)
muenzen_gezogen=1;
return muenzen_gezogen;
};
int spieler(int muenzen_anzahl, int muenzen_gezogen_computer)
{
int muenzen_gezogen;
cout << "Der Computer hat " << muenzen_gezogen_computer << " gezogen. Es liegen also noch " << muenzen_anzahl << " Muenzen auf dem Tisch. Wie viele moechten sie ziehen?" << endl;
cin >> muenzen_gezogen;
return muenzen_gezogen;
};
void main()
{
int muenzen_anzahl;
int muenzen_gezogen_spieler;
int muenzen_gezogen_computer;
cout << "Mit wie vielen Muenzen soll gespielt werden?" << endl;
cin >> muenzen_anzahl;
while (true)
{
muenzen_gezogen_computer=computer(muenzen_anzahl);
muenzen_anzahl-=muenzen_gezogen_computer;
if (muenzen_anzahl==0)
cout << "\n\n Der Computer hat gewonnen"<< endl;
Sleep(3000);
return;
muenzen_gezogen_spieler=spieler(muenzen_anzahl, muenzen_gezogen_computer);
if (muenzen_gezogen_spieler <=3 && muenzen_gezogen_spieler >= 1)
muenzen_anzahl-=muenzen_gezogen_spieler;
else
cout << "Sie dürfen nur 1,2 oder 3 Münzen ziehen!" << endl;
muenzen_gezogen_spieler=spieler(muenzen_anzahl, muenzen_gezogen_computer);
if (muenzen_anzahl==0)
cout << "\n\n Der Spieler hat gewonnen"<< endl;
Sleep(3000);
return;
};
};
hab mir den code nicht wilkich angeschaut, aber hast du schonmal versucht mit dem debugger zu gucken was dein code nach der eingabe macht? normalerweise dürfete man den fehler so finden.
Hab ich schon mehrmals. Wenn ich in Einzelschritten durchgehe, springt er immer von der Eingabe der Anzahl der Münzen direkt zu "Computer hat gewonnen", obwohl die eingegebene Zahl ja garnicht ==0 ist.
Madd Eye hat im Grunde recht, wenn du mehr als eine mit einem Semikolon abgeschlossene Code Zeile nur ausführen möchtest wenn die Bedingung für if zutrifft, dann musst du nach if(expression) eine { setzten und am Ende des If Blocks eine }.
C++ Funktioniert nicht wie Python, die Einrückung hat keine Auswirkung auf die Funktion des Codes.
Wie Madd Eye schon richtig sagte musst du jeden mehrzeiligen Block in geschweifte Klammern setzen. Die Klammern kannst du nur weglassen, wenn der Block 1 Zeile enthält.
if (muenzen_anzahl==0)
cout << "\n\n Der Computer hat gewonnen"<< endl;
Sleep(3000);
return;
hier wird nur
Code:
if (muenzen_anzahl==0)
cout << "\n\n Der Computer hat gewonnen"<< endl;
ausgeführt. (Wenn Münzen = 0, Computer gewonnen. Danach, mach, egal welcher umstände Sleep(3000) und return. Das if wird ab dem semikolon hinter endl; ignoriert)
Anders hier
Code:
if (muenzen_anzahl==0)
{
cout << "\n\n Der Computer hat gewonnen"<< endl;
Sleep(3000);
return;
}
Das heißt: "Wenn Münzen = 0, Computer hat gewonnen, warte 3000, gib ieinen wert wieder".
Ich hoffe das war einigermaßen richtig und verständlich, bin grade sau müde.
Vielen Dank! (bekommt alle ein thx) hat mir sehr geholfen. Da war wohl mein Tutorial etwas ungenau beim Thema Blöcke
Ist es denn dann in Ordnung, wenn ich einfach bei jeder If-Anweisung immer nen Block mache, egal wie viele Befehle er macht. Weil es kann ja immer sein, dass man noch was erweitern will.
Hab das Programm jetzt eh nochmal komplett neu geschrieben. Ich arbeite nämlich jetzt Objektorientiert
Allerdings hab ich immer noch nicht so richtig verstanden, wann ich jetzt nach nem Block ein Semikolon machen muss und wann nicht.
Solange nach dem If nur ein einziger Befehl kommt, brauchst du keine geschweiften Klammern, sonst schon.
Ich kann dir aber empfehlen, zumindest anfangs, immer die klammern zu setzen.
Finde den Fehler *g* 05/13/2010 - GW Bots - 7 Replies Huhu,
hab im Forum nach nen jq bot gestöbert (Jadesteinbruchbot) und auch einen gefunden. Nun hab ich das Problem das er nichts macht. Ich geb die x und y cordis vom betreten button + charakternamen ein. Dannach passiert gar nix mehr.
Code gibts hier:#include "tt6.au3"
#include <GUIConstants.au3>
; Variablen
$PID = WinGetProcess("Guild Wars")
$hprocess = _MemoryOpen($PID)
Pickit Hilfe !!! *LLD* *finde meine Fehler nicht! 04/15/2010 - Diablo 2 - 4 Replies Hi habe noch eine alte lld pickit ( d2nt 2.1 ) ich verstehe nicht wo der Fehler sein soll!
Vieleicht nimmt sich jemand die Zeit, da lld Items gern mal für sehr viel FG rausgehen! Die Pickit kann nach der Abänderung auch gerne in den DL-Bereich.
LLD PICKIT ( D2NT v 2.1 ):
[QUEST/LUA] Finde den Fehler :D 12/06/2009 - Metin2 Private Server - 4 Replies Hallo E*PvP,
ich habe wieder einen Fehler nachdem der __TARGET__.target.click Fehler behoben wurde.
nämlich kommt jetzt ein Syntax Fehler
http://img5.imagebanana.com/img/nemajg1/blabal.jp g
quest equip begin
state run begin
[QUEST/LUA] Finde den Fehler :D 12/06/2009 - Metin2 Private Server - 9 Replies Hallo E*PvP melde mich wieder mit nem Fehler^^
Also es geht um meine Quest,
also ich fang mal an :D
Wenn ich den Quest code eingebe cd -usr-rain-channel-... chmod sh make.sh usw...
Patcht es nur bis zum ersten
http://img5.imagebanana.com/img/eed6xucn/asdfasdf .jpg
2.3 Modelchange geht nicht und finde den Fehler nicht 01/09/2008 - World of Warcraft - 5 Replies Also es geht darum das ich versucht habe auf Patch 2.3 Orcs in FelOrc's umzuwandeln.
Ich hab die aktuelle WoWME.exe benutzt, alles fein säuberlich in die .config eingetragen und sogar F8 vor dem einloggen gedrückt :D
Trotzallem ist das Model der Orcs immernoch das normale.
Hier mal ein Screen von meiner .MPQ
http://www.imagehut.eu/images/46088modelchanging. JPG