我正在尝试创建拉米纸牌游戏的简化版本。我需要解析卡片缩写,例如SA是Spades Ace。 DT是Diamond 10等我知道有一种更简单的方法可以做到这一点,但这就是我的任务想要完成的方式。
示例执行看起来像
rummy 3 S2 H9 C4 ......等包括所有52张卡。argv [1]中的数字是游戏中的玩家。我怎么能把这些卡片从数字后面开始把它们放进一个阵列?
到目前为止我的代码
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int players = *argv[1];
char deck[52];
int i, j, pid, cid;
if (players > '5' || players < '3')
{
printf("%c is not the allowed number of players, min is 3 and max is 5\n",*argv[1]);
exit(0);
}
}
答案 0 :(得分:3)
快速而肮脏的演示:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
int players = atoi(argv[1]);
char deck[52][3];
int i, j, pid, cid;
if (players > 5 || players < 3)
{
printf("%d is not the allowed number of players, min is 3 and max is 5\n", players);
exit(0);
}
for (i = 0; i < argc - 2; i++)
{
strcpy(deck[i], argv[i+2]);
}
for (i = 0; i < argc - 2; i++)
{
printf("%s\n", deck[i]);
}
}
绝对没有对输入进行健全性检查。这只是为了演示。
答案 1 :(得分:1)
你的int argc是参数的数量。因此,如果您愿意,您可以将所有这些卡手动加载到阵列中。
假设你执行这样的程序:
example.exe rummy 3 S1 S2 S3 S4 A1 A2 A3 A4
然后您可以将卡片读入这样的数组(假设“rummy”是游戏类型而“3”是其他控制变量,您需要确保这一点)
int main(int argc, char *argv[])
{
char game[10] = argv[0];
int players = atoi(argv[1]);
char deck[52][3]; // an array of strings max lenght 3 (2 characters + required '\0' terminator
for (int i = 0; i < argc - 2; i++) // argc - 2 because we're accessing at i+2 so the last iteration will essentially access the last element
{
strcpy(deck[i], argv[i+2]); // copy into actual array
}
return 0;
}
现在你把你的牌放在一个名为deck的char数组中。请注意,这仅仅是一个样本,不建议直接使用。在最终的程序中,您必须对所有可能的情况进行健全性检查和验证(太多的args,太少的args,错误的args等。
答案 2 :(得分:0)
在命令行上传递的所有参数都存储在argv
数组中。 argv[0]
始终是程序的名称,接下来是你的参数(如果有的话)(作为以null结尾的字符串)。
所以假设你把它称为:
rummy 3 S2 H9 C4
这是argv包含的内容:
argv[0] = "rummy"
argv[1] = "3"
argv[2] = "S2"
argv[3] = "H9"
argv[4] = "C4"
将这些插入数组很简单:
char args[5][10];
strncpy(args[0], argv[0], 10);