Forum: Nybörjar hjälp med array [C++]

Forum huvudsida -> Programmering -> Nybörjar hjälp med array [C++]

Sidor: 1

Till botten

arkof 20:58 - 10:e Mars 2010 | Post #1
Medlem
Inlägg: 8


Skicka PM
Hej.
Som sagt jag är nybörjare. Satt och tänkte göra ett litet kortspel, där datorn väljer 5st olika kort mellan 1-13 och
varje kort får en korttyp mellan 1-4. (Hjärter, Ruter, Spader & Klöver).

Allt funkar fint tills ja kört programmet klart. Då får jag ett
fel msg som lyder:
  1. Run-Time Check Failure #2 - Stack around the variable 'cardType' was corruped.
  2.  
  3. [ BREAK ] [ Continue ]


min kod ser ut så här (ursäkta röran jag är nybörjare ^^)

  1. #include <iostream>
  2. #include <ctime>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8. int card[5]; // 5 olika kort.
  9. int cardType[4]; // 4 olika korttyper
  10.  
  11. char hjarter = 3, ruter = 4, klover = 5, spader = 6; // ascii chars
  12.  
  13. int i=1;
  14. while (i <= 5)
  15. {
  16. srand(time_t(i));
  17. card[i] = rand() % 13 + 1; // rand ett kort mellan 1-13
  18. cardType[i] = rand() % 4 + 1; // rand en korttype mellan 1-4
  19. i+=1;
  20. }
  21.  
  22. int l = 1;
  23. while (l <= 5)
  24. {
  25. if (cardType[l] == 1) // om de blir korttyp 1 = hjärter.
  26. {
  27. if (card[l] == 11)
  28. {
  29. cout << hjarter << " knight";
  30. }
  31. else if (card[l] == 12)
  32. {
  33. cout << hjarter << " queen";
  34. }
  35. else if (card[l] == 13)
  36. {
  37. cout << hjarter << " king";
  38. }
  39. else if (card[l] == 1)
  40. {
  41. cout << hjarter << " ace";
  42. }
  43. else
  44. {
  45. cout << hjarter << card[l];
  46. }
  47.  
  48. }
  49.  
  50.  
  51. else if (cardType[l] == 2) // om de blir korttyp 2 = ruter.
  52. {
  53. if (card[l] == 11)
  54. {
  55. cout << ruter << "knight";
  56. }
  57. else if (card[l] == 12)
  58. {
  59. cout << ruter << "queen";
  60. }
  61. else if (card[l] == 13)
  62. {
  63. cout << ruter << "king";
  64. }
  65. else if (card[l] == 1)
  66. {
  67. cout << ruter << "ace";
  68. }
  69. else
  70. {
  71. cout << ruter << card[l];
  72. }
  73. }
  74.  
  75.  
  76.  
  77.  
  78. else if (cardType[l] == 3) // om de blir korttyp 3 = klöver.
  79. {
  80. if (card[l] == 11)
  81. {
  82. cout << klover << "knight";
  83. }
  84. else if (card[l] == 12)
  85. {
  86. cout << klover << "queen";
  87. }
  88. else if (card[l] == 13)
  89. {
  90. cout << klover << "king";
  91. }
  92. else if (card[l] == 1)
  93. {
  94. cout << klover << "ace";
  95. }
  96. else
  97. {
  98. cout << klover << card[l];
  99. }
  100. }
  101.  
  102.  
  103.  
  104. else if (cardType[l] == 4) // om de blir korttyp 4 = spader.
  105. {
  106. if (card[l] == 11)
  107. {
  108. cout << spader << "knight";
  109. }
  110. else if (card[l] == 12)
  111. {
  112. cout << spader << "queen";
  113. }
  114. else if (card[l] == 13)
  115. {
  116. cout << spader << "king";
  117. }
  118. else if (card[l] == 1)
  119. {
  120. cout << spader << "ace";
  121. }
  122. else
  123. {
  124. cout << spader << card[l];
  125. }
  126. }
  127.  
  128. cout << endl; // ny rad mellan varje kort.
  129. l+=1;
  130. }
  131.  
  132. system("pause");
  133. return 0;
  134. }



skriv gärna vad jag gjort fel och varför, vill lära migSmiley







Kerp 21:08 - 10:e Mars 2010 | Post #2
Medlem
Inlägg: 2


Skicka PM
Felet beror förmodligen på att du försöker komma åt element nummer 5 och sex i variabeln cardtype de existerar inte.




arkof 12:00 - 11:a Mars 2010 | Post #3
Medlem
Inlägg: 8


Skicka PM
Jag testa ändra rad 23 till


  1. while (l <= 4)


men hjälpte inte något.
När försöker jag komma åt cardType[5] & [6]?
Var i koden?Smiley





tobeco 12:49 - 11:a Mars 2010 | Post #4
Medlem
Inlägg: 13


Skicka PM
Ett litet tips, när du kör if , else if, else if så avsluta alltid med en else sats som skriver ut någon bra text, tex "Error - felaktigt värde på korttyp". För då ser du om det blir något fel, man fångar upp värden som inte ska finnas, men kan uppstå iaf ibland när man programmerar större program. Så som god vana redan vid små program börja felhantera och säkra upp koden för att det ska funka bättre. Det gör livet mycket enklare att levaSmiley

-------------------------
Less is more
Funktion framför designe!!!!!



Kerp 16:41 - 11:a Mars 2010 | Post #5
Medlem
Inlägg: 2


Skicka PM
    Citat av arkof:
Jag testa ändra rad 23 till


  1. while (l <= 4)


men hjälpte inte något.
När försöker jag komma åt cardType[5] & [6]?
Var i koden?Smiley


Jag är ledsen men jag tror jag blandade ihop termer där, hoppas denna förklaringen hjälper.

Om du deklarerar CardType[4] har den 4 element med index 0 - 3. Alltså är följande okej att skriva.

  1. CardType[0] = 1;
  2. CardType[1] = 1;
  3. CardType[2] = 1;
  4. CardType[3] = 1;


Men om du gör en while loop som räknar från 1 och slutar när variabeln är 5 så kommer du sätta dessa positioner i arrayen istället.
  1. CardType[1] = 1;
  2. CardType[2] = 1;
  3. CardType[3] = 1;
  4. CardType[4] = 1; //Funkar inte.
  5. CardType[5] = 1; //Funkar inte.


Och eftersom Cardtype[4] och 5 inte existerar får du ett fel vid körning.

Jag hoppas jag förklarade bra och förlåt mig om jag pratar om självklarheter men som jag sa är jag inte någon expert själv.




arkof 16:28 - 12:a Mars 2010 | Post #6
Medlem
Inlägg: 8


Skicka PM
Tack.
Ja de slog mig att den börjar med [0]
och inte [1].
:)




Sidor: 1

Forum huvudsida -> Programmering -> Nybörjar hjälp med array [C++]
Atom feed

Du får inte posta i den här tråden | Till toppen