Array erzeugt Programmabsturz
-
Hallo
Ich habe mal vor langem C++ "gelernt" und wollte nun ein kleines Poker-Programm schreiben. Aber irgendwie fehlts bei mir noch an den Basics...
Ich kann bei folgendem Programm, welches für eine beliebige anzahl Spieler Karten austeilen sollte, keinen Fehler mehr finden.
Das Programm stürzt beim Ausführen mit einer Windows-Fehlermeldung ab, compiliert wird es einwandfre. Anscheinend verträgt es die Ausgabe über ein Array nicht, aber keinen Plan wiso://cout << conflicts << "Konflikte" << endl; for (int i=0; i<players; i++) { cout << "Spieler " << i+1 << ": " << cards[ hand[i][0][0] ][ hand[i][0][1] ]; cout << " " << cards[ hand[i][1][0] ][ hand[i][1][1] ] << endl; }Da ich nicht weis, ob das ein Logikfehler ist oder nicht gebe ich mal den ganzen Code an. Zuerst definiere ich die möglichen Karten, danach wird per Zufall eine Karte gezogen und kontrolliert, ob diese nicht schon vergeben ist. Danach werden in einem anderen Array mit allen Spieler-Händen die beiden Karten eingetragen und am Schluss ausgegeben. Der Code könnte auch logisch nicht funktionieren, aber mir geht es darum das Ganze mal compilieren zu können.
#include <cstdlib> #include <iostream> using namespace std; // Kartendeck besteht aus 4x13 = 52 Karten const char cards[13][4][3] = { { "Ah", "As", "Ap", "Ak" }, { "Kh", "Ks", "Kp", "Kk" }, { "Qh", "Qs", "Qp", "Qk" }, { "Jh", "Js", "Jp", "Jk" }, { "1h", "1s", "1p", "1k" }, { "9h", "9s", "9p", "9k" }, { "8h", "8s", "8p", "8k" }, { "7h", "7s", "7p", "7k" }, { "6h", "6s", "6p", "6k" }, { "5h", "5s", "5p", "5k" }, { "4h", "4s", "4p", "4k" }, { "3h", "3s", "3p", "3k" }, { "2h", "2s", "2p", "2k" }}; int main(int argc, char *argv[]) { int players, conflicts; // Anzahl Spieler bool carddeck[13][4]; // Ausgeteilte Karten bool unique = false; // Verifizierungsvariable // Programm cout << "Anzahl Spieler: "; cin >> players; int hand[players-1][2][2]; // [Spieler 0 bis x][Karte 0 oder 1][Wert oder Art] srand((unsigned)time(NULL)); // carddeck reseten for (int i=0; i<13; i++) { for (int j=0; j<4; j++) { carddeck[i][j] = false; } } conflicts = 0; //Karten austeilen for (int i=0; i<players; i++) { // Spieler durchlaufen for (int j=0; j<2; j++ ) { // 2 Karen ziehen while (!unique) { // Solange bis eine gültige Karte gezogen wurde unique = true; hand[i][j][0] = rand()%13; // Kartenwert ziehen hand[i][j][1] = rand()%4; // Kartenart ziehen if (carddeck[ hand[i][j][0] ][ hand[i][j][1] ]) { // Kontrolle ob Karte bereits vergeben ist unique = false; // Ja conflicts++; } else { carddeck[ hand[i][j][0] ][ hand[i][j][1] ] = true; } // Nein => eintragen } } } //cout << conflicts << "Konflikte" << endl; for (int i=0; i<players; i++) { cout << "Spieler " << i+1 << ": " << cards[ hand[i][0][0] ][ hand[i][0][1] ]; cout << " " << cards[ hand[i][1][0] ][ hand[i][1][1] ] << endl; } system("PAUSE"); return EXIT_SUCCESS; }Ich lasse mich auch gerne belehren, wie man solche fehler selber analysieren kann (mit Dev-C++)...
Besten Dank für deine Aufmerksamkeit

greez gieraffe
-
Hi,
ein Array mit z. B. 5 Elementen benutzt Index 0 bis Index 4 (=5 Elemente).
mfg theosoft
-
ahhrg, jo, genau!!
Anscheinend ist die erste Karte in Ordnung, die restlichen haben viel zu hohe Werte... Keinen Plan wieso, aber das dürfte man rausfinden.
danke und gruss