C++ Kartenspiel problem?

... komplette Frage anzeigen

3 Antworten

Als allererstes und ganz wichtig: Kauf dir ein Buch bzw. such dir ein Tutorial und lern systematisch von vorne nach hinten programmieren, in dem Code sind dermaßen viele Fehler und Unsauberkeiten, die dir irgendwann nochmal auf die Füße fallen werden. goto, keine Arrays, die Spielkarten selbst könnte man eher als Objekte betrachten, if-Abfragen, wo man lieber switch nehmen sollte, keine Funktionen und das, was unten in den Warnungen angemeckert wird, könntest du auch beheben ... es gibt einen Unterschied zwischen "Programmieren" und "Code raten, bis irgendwas funktioniert, auch wenn du nicht verstehst, warum".

Dein aktuelles Problem liegt denk ich mal in diesen Zeilen... irgendwo

int zufall;
for ( zufall=0; zufall<1; zufall++ )
zufall = ("%d ", rand() % deck);
cout << zufall << endl;

Ich würde mal vermuten, dass hinter der Schleife eine geschweifte Klammer fehlt, aber die Zählvariable "zufall" wird in der Schleife überschrieben (was man ebenfalls vermeiden sollte) und die Schleife wird eh nur einmal ausgeführt. Die oben zitierten Zeilen sind eigentlich sinnlos. Davon mal abgesehen fehlt srand() zur Initialisierung des Zufallszahlengenerators.... C++ ist relativ kompliziert, wie biste eigentlich darauf gekommen, das als erste Einsteigersprache zu nehmen?

Antwort bewerten Vielen Dank für Deine Bewertung

Das offensichtliche zuerst: KEIN GOTO!!! Und zur Sicherheit wiederhole ich es nochmal: KEIN GOTO!!!!

Sei mir nicht böse, aber es ist eine Schande, dass dieses Schlüsselwort in C++ überhaupt existiert. Es ist äußerst gefährlich und man sollte es nur benutzen wenn man wirklich(!) weiß, was man tut. Und selbst dann...wer weiß was er tut wird darauf dankend verzichten. Das Problem damit ist: Es macht Code unleserlich. Und noch schlimmer: Wenn es an falschen Stellen verwendet wird führt es zu fiesen Problem, die schwer zu debuggen sind (ist soweit ich überblicke bei dir nicht der Fall...aber trotzdem...)

Auch deine if-else Strukturen...mit einem switch statement wären die sehr viel lesbarer.

Aber dein Problem ist ein ganz anderes. Du benutzt den Zufallsgenerator...seedest (also initialisierst) ihn nicht. Zu rand gehört immer ein srand...ansonsten wirst du immer die gleiche Ergebnisse sehen.
Am Anfang des Programmes ein

srand((unsignedtime NULL));


(inkludiere <time.h>) kann hier Wunder bewirken.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von reddox86
06.02.2016, 23:05

GF.net hat meine Antwort ruiniert...du musst

srand( (unsigned)time( NULL ) );

einfügen ;-)

2

Bitte sag mir nicht das to goto in deinem Code verwendest...

Bitte...

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Wedlich
06.02.2016, 22:41

Doch, was spricht dagegen? Ich kenn mich 0 aus.

0

Was möchtest Du wissen?