|
You last visited: Today at 10:38
Advertisement
[C++] Finde den Fehler nicht
Discussion on [C++] Finde den Fehler nicht within the C/C++ forum part of the Coders Den category.
09/23/2010, 17:40
|
#1
|
elite*gold: 9
Join Date: Dec 2009
Posts: 1,071
Received Thanks: 819
|
[C++] Finde den Fehler nicht
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;
};
};
Vielen Dank im Vorraus,
mfg abba232
|
|
|
09/23/2010, 19:04
|
#2
|
elite*gold: 0
Join Date: May 2010
Posts: 793
Received Thanks: 268
|
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.
|
|
|
09/23/2010, 19:09
|
#3
|
elite*gold: 9
Join Date: Dec 2009
Posts: 1,071
Received Thanks: 819
|
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.
|
|
|
09/23/2010, 19:26
|
#4
|
elite*gold: 260
Join Date: Apr 2010
Posts: 229
Received Thanks: 142
|
schon mal was von klammern gehört?
Code:
if(a==b){
mach was;
}
Die hast du überall vergessen
|
|
|
09/23/2010, 21:23
|
#5
|
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
|
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.
|
|
|
09/23/2010, 21:24
|
#6
|
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,345
|
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.
|
|
|
09/23/2010, 22:02
|
#7
|
elite*gold: 0
Join Date: Apr 2008
Posts: 1,874
Received Thanks: 213
|
Anhand von code gesagt:
Code:
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.
|
|
|
09/24/2010, 16:44
|
#8
|
elite*gold: 9
Join Date: Dec 2009
Posts: 1,071
Received Thanks: 819
|
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.
mfg abba232
|
|
|
09/24/2010, 17:01
|
#9
|
elite*gold: 42
Join Date: Jun 2008
Posts: 5,425
Received Thanks: 1,888
|
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.
|
|
|
09/24/2010, 17:16
|
#10
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
Quote:
Originally Posted by abba232
Allerdings hab ich immer noch nicht so richtig verstanden, wann ich jetzt nach nem Block ein Semikolon machen muss und wann nicht.
mfg abba232
|
Ein Semikolon gehört nie hinter die geschweiften Klammern, außer bei Klassen und Strukturen:
Code:
class X
{
int x;
};
struct y
{
int y;
};
|
|
|
 |
Similar Threads
|
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
|
All times are GMT +1. The time now is 10:39.
|
|