Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将参数解析为数组_C_Arrays_Parameter Passing_Command Line Arguments - Fatal编程技术网

C 将参数解析为数组

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

我正在尝试创建一个简化版的拉米纸牌游戏。我需要解析卡片中的缩写,例如SA是Spades Ace。DT是钻石10等。我知道有一个更简单的方法来做这件事,但这就是我的任务想要它完成的方式

示例执行如下所示

拉米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);
    }

}
#包括
#包括
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而不是为卡片创建一个新的数组吗?你可以,但是你必须使用字符作为卡片组的格式。如果你将它们转换为数字或数字对,那么在卡片组上做进一步的处理会更容易。