我正在尝试使用结构和链接列表制作纸牌游戏,我从读取带有颜色及其值的文件中的卡片开始,所以我遇到了诸如“ J
”之类的卡片的问题,“ D
”,“ K
”,“ 1, 11, 12, 13
”
它们的值分别设置为 #define J 11
typedef struct card {
char color[15];
unsigned int value;
struct card* pnext;
struct card* pprev;
} cardsStruct;
struct card* pstart = NULL;
struct card* plast = NULL;
int main()
{
FILE *myFile;
cardsStruct card;
if ((myFile = fopen("Cards.txt", "rb")) == NULL)
return -1;
while (!feof(myFile)){
fscanf(myFile, "%s %u", card.color, &card.value);
printf("%s %u\n", card.color, card.value);
}
fclose(myFile);
return 0;
}
。在使用以下结构的情况下,我该如何做:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
答案 0 :(得分:0)
在 C 中,您可以尝试模拟C ++中的地图的感觉 ...
int characters[128] = {0};
characters['A'] = 1;
characters['J'] = 11;
characters['D'] = 12;
characters['K'] = 13;
并像这样打印它:
printf("%s %u\n", card.color, characters['K']);
答案 1 :(得分:0)
您需要三种持卡方式:
在文本文件中
供程序使用
显示时
我认为这里的诀窍是进行转换。 例如,在文件中使用字母(A,J,D / Q,K)更好,因此它易于阅读并且易于编辑。 在显示时,您还希望它是人类可读的。 在RAM中,为了程序使用,最好使用十六进制值,这样将很容易进行计算。
答案 2 :(得分:0)
switch(card)
{
case 'A':
value = 1;
break;
case 'J':
value = 11;
break;
/* ... */
}
答案 3 :(得分:0)
In a comment您写了:
卡片将保存在文本文件中,例如“ RED J”
很显然,您不能使用格式说明符来解析无符号整数的字母。
所以这是错误的:
fscanf(myFile, "%s %u", card.color, &card.value);
我建议您逐行读取文件(使用fgets()
或getline()
),然后尝试对其进行解析,例如使用sscanf()
。因此,如果此方法无法解析数字sscanf(in, "%14s %u", out)
,则可以在之后尝试解析"%14s %c"
。
其他一些建议:
供参考和进一步阅读: