C 我想用一个开关箱而不是两个开关箱

C 我想用一个开关箱而不是两个开关箱,c,C,这是一个从一副牌中求出两张牌值之和的程序。卡由2,3,…10和J,A,Q和K组成。str[0]由第一张卡的值组成,temp[0]由第二张卡的值组成。我想使用一个开关盒,而不是两个开关盒,因为str[0]和temp[0]的情况相同。那么,我可以只使用一个开关箱而不是两个开关箱吗。我该怎么做呢?您只需将逻辑放入函数中,用temp[0]调用一次,再用str[0]调用一次即可。这就是函数的用途。与其重复逻辑,不如将其放入函数中并多次调用 另外,在这里,使用if语句代替switchcases将起到更好的作

这是一个从一副牌中求出两张牌值之和的程序。卡由2,3,…10和J,A,Q和K组成。str[0]由第一张卡的值组成,temp[0]由第二张卡的值组成。我想使用一个开关盒,而不是两个开关盒,因为str[0]和temp[0]的情况相同。那么,我可以只使用一个开关箱而不是两个开关箱吗。我该怎么做呢?

您只需将逻辑放入函数中,用
temp[0]
调用一次,再用
str[0]
调用一次即可。这就是函数的用途。与其重复逻辑,不如将其放入函数中并多次调用

另外,在这里,使用
if
语句代替
switch
cases将起到更好的作用。比如:-

int SumOfCards(char str[], int n)
{
   if(n==0)
   return -1;
   int sum1,sum2;
   char temp[2];
   if(str[1]==' ')
   temp[0]= str[2];
   else if(str[2]==' ')
   temp[0] = str[3];

switch(str[0])
{
    case '2' : sum1 = 2;
    break;
    case '3' : sum1 = 3;
    break;
    case '4' : sum1 = 4;
    break;
    case '5' : sum1 = 5;
    break;
    case '6' : sum1 = 6;
    break;
    case '7' : sum1 = 7;
    break;
    case '8' : sum1 = 8;
    break;
    case '9' : sum1 = 9;
    break;
    case '1' : sum1 = 10;
    break;
    case 'K' : sum1 = 10;
    break;
    case 'J' : sum1 = 10;
    break;
    case 'Q' : sum1 = 10;
    break;
    case 'A' : sum1 = 11;
    break;
    default : sum1 = 0;
    break;

}
 switch(temp[0])
{

    case '2' : sum2 = 2;
    break;
    case '3' : sum2 = 3;
    break;
    case '4' : sum2 = 4;
    break;
    case '5' : sum2 = 5;
    break;
    case '6' : sum2 = 6;
    break;
    case '7' : sum2 = 7;
    break;
    case '8' : sum2 = 8;
    break;
    case '9' : sum2 = 9;
    break;
    case '1' : sum2 = 10;
    break;
    case 'K' : sum2 = 10;
    break;
    case 'J' : sum2 = 10;
    break;
    case 'Q' : sum2 = 10;
    break;
    case 'A' : sum2 = 11;
    break;
    default : sum2 = 0;
    break;

}
   if(str[0]== 'A' && temp[0]== 'A')
   {sum1 = 1;
   sum2 = 1;
   }
   int sum = sum1 + sum2;
   return sum;

}
然后

func(str[0],&sum2);
...
func(temp[0],&someintvar);
void func(字符c,int*a){

>写一个函数,将一个函数转换成代码< >代码> '2' < /代码>至代码> > 9' < /代码>该卡的值为“代码> CARD-名称‘2’+2 < /代码>,可以减少语句:<代码>否则,(C==‘1’′c=‘J’=‘k’=k’=C==‘a’c c==‘q’)< /> > >代码>如果(c)(strchr(“1JKAQ”,c)){…}
@machine_1:是的,我想到了。但我不确定OP会有多感激它。(我猜OP是个初学者),但这是一个好方法。谢谢你在这里发表评论。
void func(char c, int *a){
   if( c>='2' && c<='9')
      *a = c-'0';
   else if( c=='1' || c=='J' || c=='K' || c=='A' || c=='Q')
      *a = 10;
   else
      *a = 0;
}