如何为char分配一个int值?

时间:2018-12-20 08:45:39

标签: c struct char int

我正在尝试使用结构和链接列表制作纸牌游戏,我从读取带有颜色及其值的文件中的卡片开始,所以我遇到了诸如“ 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]

4 个答案:

答案 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"

其他一些建议:

  • 请勿混用链表的实现和数据类型。
  • 定义不同的类型来表示列表,而不是表示列表节点。
  • 拆分功能,尤其是获取输入和解析输入。
  • 一致地检查和处理错误。
  • 将卡的文件表示与程序中的数据表示分离。
  • 创建用于反序列化的函数,即,将西服和排名字符串转换为枚举值或定义的整数文字。
  • 创建一个将西装颜色转换为颜色的函数,而不是直接存储颜色字符串。
  • 如果您是C语言的新手,那么也许有必要先用另一种简单的语言来制定业务逻辑,然后再将其移植到C语言。

供参考和进一步阅读: