Мне жаль, что это не так подробно, как следовало бы, но я невероятно ограничен во времени.Я пытаюсь написать программу, которая имитирует игру в Блэкджек, используя символы, которые представляют карты из входного файла (имитируя колоду).Я еще не закончил, но, как я уже сказал, у меня почти нет времени, чтобы напечатать это.У меня, в частности, возникают проблемы с использованием указателей и кода ошибки, связанного с оператором if в main ().в нем говорится, что у ranOut (предполагается, что он используется для завершения игры, когда в файле заканчивается карта, представленная в файле как 0), было выдано исключение: нарушение прав доступа для чтения, nullptr.Я извиняюсь, если это тривиально, но я все еще плохо знаком с C, и указатели - проклятие моего существования.Вот мой код:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
FILE *fpOut;
FILE *fpIn;
#define TRUE 1
#define FALSE 0
int playHand(int *dealerTotal, int *playerTotal, int *ranOut); //Plays one hand
int getCard(int total); //Reads next card from input, assigns value to points
int main() {
if (!(fpOut = fopen("csis.txt", "w")))
{
printf("csis.txt could not be opened for output.");
exit(1);
}
if (!(fpIn = fopen("cards.txt", "r")))
{
printf("cards.txt could not be opened for input.");
exit(1);
}
int *dealerTotal = 0; //Initialize variables to count wins
int *playerTotal = 0;
int *ranOut = 0; //ends loop
while (1)
{
playHand(dealerTotal, playerTotal, ranOut);
if (*ranOut == TRUE)
break;
}
printf("Total Dealer Wins: %d", *dealerTotal);
printf("Total Player Wins: %d", *playerTotal);
fclose(fpIn);
fclose(fpOut);
getchar();
return 0;
}
int playHand(int *dealerTotal,int *playerTotal, int *ranOut)
{
int pCard[10] = { 0 };
int dCard[10] = { 0 };
int dWin = 0;
int pWin = 0;
int i = 0;
int dFin = 0;
int pFin = 0;
while (i < 10)
{
int sumP = pCard[0] + pCard[1] + pCard[2] + pCard[3] + pCard[4] +
pCard[5] + pCard[6] + pCard[7] + pCard[8] + pCard[9];
int sumD = dCard[0] + dCard[1] + dCard[2] + dCard[3] + dCard[4] +
dCard[5] + dCard[6] + dCard[7] + dCard[8] + dCard[9];
if (sumP <= 15)
{
pCard[i] = getCard(sumP);
}
else
pFin = TRUE;
if (sumD <= 16)
{
dCard[i] = getCard(sumD);
}
else
dFin = TRUE;
if (pCard[i] == 42 || dCard[i] == 42)
{
*ranOut = TRUE;
break;
}
sumP = pCard[0] + pCard[1] + pCard[2] + pCard[3] + pCard[4] + pCard[5] +
pCard[6] + pCard[7] + pCard[8] + pCard[9];
sumD = dCard[0] + dCard[1] + dCard[2] + dCard[3] + dCard[4] + dCard[5] +
dCard[6] + dCard[7] + dCard[8] + dCard[9];
if (sumP > 21 || sumD == 21)
{
dWin = TRUE;
pWin = FALSE;
}
else if (sumD > 21 || sumP == 21)
{
dWin = FALSE;
pWin = TRUE;
}
else if (dFin && pFin)
{
if ((21 - sumP) > (21 - sumD))
{
dWin = TRUE;
pWin = FALSE;
}
else
{
dWin = FALSE;
pWin = TRUE;
}
}
if (dWin)
{
*dealerTotal++;
break;
}
else if (pWin)
{
*playerTotal++;
break;
}
i++;
}
return 1;
}
int getCard(int total)
{
char x;
int y = 0;
if (!feof(fpIn))
{
x = fgetc(fpIn);
switch (x)
{
case '0':
y = 42;
break;
case '1':
y = 1;
break;
case '2':
y = 2;
break;
case '3':
y = 3;
break;
case '4':
y = 4;
break;
case '5':
y = 5;
break;
case '6':
y = 6;
break;
case '7':
y = 7;
break;
case '8':
y = 8;
break;
case '9':
y = 9;
break;
case 'T':
y = 10;
break;
case 'K':
y = 10;
break;
case 'Q':
y = 10;
break;
case 'J':
y = 10;
break;
case 'A':
if(total > 10)
y = 1;
else if (total >= 10)
y = 11;
break;
}
}
return y;
}