Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 10:38

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[C++] Finde den Fehler nicht

Discussion on [C++] Finde den Fehler nicht within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 9
Join Date: Dec 2009
Posts: 1,071
Received Thanks: 819
Arrow [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_anzahlint 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_anzahlmuenzen_gezogen_computer);
        if (
muenzen_gezogen_spieler <=&& 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_anzahlmuenzen_gezogen_computer);

        if (
muenzen_anzahl==0)
            
cout << "\n\n Der Spieler hat gewonnen"<< endl;
            
Sleep(3000);
            return;
    };
}; 

Vielen Dank im Vorraus,
mfg abba232
.Infinite is offline  
Old 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.
nkkk is offline  
Old 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.
.Infinite is offline  
Old 09/23/2010, 19:26   #4
 
Madd Eye's Avatar
 
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
Madd Eye is offline  
Thanks
1 User
Old 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.
Bot_interesierter is offline  
Thanks
1 User
Old 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.
ms​ is offline  
Thanks
1 User
Old 09/23/2010, 22:02   #7
 
NBA's Avatar
 
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.
NBA is offline  
Thanks
1 User
Old 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
.Infinite is offline  
Old 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.
MoepMeep is offline  
Old 09/24/2010, 17:16   #10


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Quote:
Originally Posted by abba232 View Post
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;
};
MrSm!th is offline  
Reply


Similar Threads 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.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.