C 将参数解析为数组
我正在尝试创建一个简化版的拉米纸牌游戏。我需要解析卡片中的缩写,例如SA是Spades Ace。DT是钻石10等。我知道有一个更简单的方法来做这件事,但这就是我的任务想要它完成的方式 示例执行如下所示 拉米3 S2 H9 C4。。。等。包括所有52张卡 argv[1]中的数字是游戏中的玩家。我该如何将从数字后开始的卡片放入阵列中 到目前为止我的代码C 将参数解析为数组,c,arrays,parameter-passing,command-line-arguments,C,Arrays,Parameter Passing,Command Line Arguments,我正在尝试创建一个简化版的拉米纸牌游戏。我需要解析卡片中的缩写,例如SA是Spades Ace。DT是钻石10等。我知道有一个更简单的方法来做这件事,但这就是我的任务想要它完成的方式 示例执行如下所示 拉米3 S2 H9 C4。。。等。包括所有52张卡 argv[1]中的数字是游戏中的玩家。我该如何将从数字后开始的卡片放入阵列中 到目前为止我的代码 #include <stdio.h> #include <stdlib.h> int main(int argc, cha
#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);
}
}
#包括
#包括
int main(int argc,char*argv[])
{
int players=*argv[1];
字符组[52];
int i,j,pid,cid;
如果(玩家>'5'| |玩家<'3')
{
printf(“%c不是允许的玩家数量,最小值为3,最大值为5”,*argv[1]);
出口(0);
}
}
在命令行上传递的所有参数都存储在argv
数组中argv[0]
始终是程序名,接下来是参数(如果有)(以null结尾的字符串)
假设您将其称为:
拉米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);
在命令行上传递的所有参数都存储在
argv
数组中argv[0]
始终是程序名,接下来是参数(如果有)(以null结尾的字符串)
假设您将其称为:
拉米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);
快速而肮脏的演示:
#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]);
}
}
#包括
#包括
#包括
int main(int argc,char*argv[])
{
int players=atoi(argv[1]);
半焦甲板[52][3];
int i,j,pid,cid;
如果(玩家>5 | |玩家<3)
{
printf(“%d是不允许的玩家数量,最小为3,最大为5”,玩家);
出口(0);
}
对于(i=0;i
绝对没有对输入进行健全性检查。这只是为了演示。快速而肮脏的演示:
#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]);
}
}
#包括
#包括
#包括
int main(int argc,char*argv[])
{
int players=atoi(argv[1]);
半焦甲板[52][3];
int i,j,pid,cid;
如果(玩家>5 | |玩家<3)
{
printf(“%d是不允许的玩家数量,最小为3,最大为5”,玩家);
出口(0);
}
对于(i=0;i
绝对没有对输入进行健全性检查。这只是为了演示。您的int argc是参数的计数。因此,如果您愿意,您确实可以手动将所有这些卡加载到阵列中 假设您这样执行程序:
example.exe rummy 3 S1 S2 S3 S4 A1 A2 A3 A4
然后,您可以将这些卡读入这样的数组(假设“rummy”是游戏类型,“3”是其他控制变量,您需要确保这一点)
intmain(intargc,char*argv[])
{
char game[10]=argv[0];
int players=atoi(argv[1]);
字符组[52][3];//一个字符串数组,最大长度为3(2个字符+必需的'\0'终止符)
对于(inti=0;i
现在,您的卡位于一个名为deck的字符数组数组中。请注意,这完全只是一个示例,不建议直接使用。在最终的程序中,您必须针对所有可能的情况进行健全性检查和验证(参数太多、太少、错误的参数等等。您的int argc是参数的计数。因此,如果您选择,您确实可以手动将所有这些卡加载到一个数组中 假设您这样执行程序:
example.exe rummy 3 S1 S2 S3 S4 A1 A2 A3 A4
然后,您可以将这些卡读入这样的数组(假设“rummy”是游戏类型,“3”是其他控制变量,您需要确保这一点)
intmain(intargc,char*argv[])
{
char game[10]=argv[0];
int players=atoi(argv[1]);
字符组[52][3];//一个字符串数组,最大长度为3(2个字符+必需的'\0'终止符)
对于(inti=0;i
现在,您的卡位于一个名为deck的字符数组数组中。请注意,这完全只是一个示例,不建议直接使用。在最终的程序中,您必须针对所有可能的情况(参数太多、太少、错误等)进行健全性检查和验证。
argv[1]
是指向“3”
,argv[2]
是指向“S2”
等的指针。您应该熟悉字符串和指针。您好,谢谢您的评论,我知道argv[1]是3,2是S2,但在C中如何具体地将所有卡S2、H9等放入一个数组。谢谢argv[1]
是指向“3”
,argv[2]的指针
是指向“S2”
等的指针。您应该熟悉字符串和指针。您好,谢谢您的评论,我知道argv[1]is 3和2是S2,但在C中如何具体地将所有的卡S2、H9等放入一个数组中。谢谢,我应该使用argv而不是为卡创建一个新数组吗?可以,但随后您会将字符作为卡组的格式。如果将它们转换为数字或数字,则在卡组上进行进一步处理会更容易成对。那么我应该使用argv而不是为卡片创建一个新的数组吗?你可以,但是你必须使用字符作为卡片组的格式。如果你将它们转换为数字或数字对,那么在卡片组上做进一步的处理会更容易。