求看出错在哪里(计算黑杰克点数)

img


#include
using namespace std;
int main()
{
    int cards,sum1,sum2,sum3,sum4,sum5,sum,points;
    char card1,card2,card3,card4,card5;
    cout<<"how many cards you hold in hand?\n";
    cin>>cards;
    switch(cards)
    {
        case 2:
            cout<<"please enter each one's points.1~9 fo r1~9,t for ten,j,k,q,a for J,K,Q,A.\n";
            cin>>card1;
            switch(card1)
            {
                case '1':
                    sum1=1;
                    break;
                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 't':
                case 'j':
                case 'k':
                case 'q':
                    sum1=10;
                    break;
                case 'a':
                    sum1=11;
                    break;
            }
            cin>>card2;
            switch(card2)
            {
                case '1':
                    sum2=1;
                    break;
                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 't':
                case 'j':
                case 'k':
                case 'q':
                    sum2=10;
                    break;
                case 'a':
                    sum2=11;
                    break;
            }
            sum=sum1+sum2;
            if(sum<=21)
            {
                cout<<"you got "<" points.";
            }
            else
            {
                cout<<"you got 12 points.";
            }
            break;
        case 3:
            cout<<"please enter each one's points.1~9 fo r1~9,t for ten,j,k,q,a for J,K,Q,A.\n";
            cin>>card1;
            switch(card1)
            {
                case '1':
                    sum1=1;
                    break;
                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 't':
                case 'j':
                case 'k':
                case 'q':
                    sum1=10;
                    break;
                case 'a':
                    sum1=11;
                    break;
            }
            cin>>card2;
            switch(card2)
            {
                case '1':
                    sum2=1;
                    break;
                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 't':
                case 'j':
                case 'k':
                case 'q':
                    sum2=10;
                    break;
                case 'a':
                    sum2=11;
                    break;
            }
            cin>>card3;
                switch(card3)
            {
                case '1':
                    sum3=1;
                    break;
                case '2':
                    sum3=2;
                    break;
                case '3':
                    sum3;
                    break;
                case '4':
                    sum3=4;
                    break;
                case '5':
                    sum3=5;
                    break;
                case '6':
                    sum3=6;
                    break;
                case '7':
                    sum3=7;
                    break;
                case '8':
                    sum3=8;
                    break;
                case '9':
                    sum3=9;
                    break;
                case 't':
                case 'j':
                case 'k':
                case 'q':
                    sum3=10;
                    break;
                case 'a':
                    sum3=11;
                    break;
            }
            sum=sum1+sum2+sum3;
            if((sum1==11&&sum2!=11&&sum3!=11)||(sum2==11&&sum1!=11&&sum3!=11)||(sum3==11&&sum2!=11&&sum1!=11))
            {
                if(sum>21)
                {
                    points=sum-10;
                    cout<<"you got "<" points.";
                }
                else
                {
                    cout<<"you got "<" points.";
                }
            }
            else if(sum1!=11&&sum2!=11&&sum3!=11)
            {
                cout<<"you got "<" points.";
            }
            else if((sum1==11&&sum2==11&&sum3==11)||(sum1==10&&sum2==11&&sum3==11)||(sum1==11&&sum2==10&&sum3==11)||(sum1==11&&sum2==11&&sum3==10))
            {
                points=sum-20;
                cout<<"you got "<" points.";
            }
            else
            {
                points=sum-10;
                cout<<"you got "<" points.";
            }
            break;
            
            
        case 4:
            cout<<"please enter each one's points.1~9 fo r1~9,t for ten,j,k,q,a for J,K,Q,A.\n";
            cin>>card1;
            switch(card1)
            {
                case '1':
                    sum1=1;
                    break;
                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 't':
                case 'j':
                case 'k':
                case 'q':
                    sum1=10;
                    break;
                case 'a':
                    sum1=11;
                    break;
            }
            cin>>card2;
            switch(card2)
            {
                case '1':
                    sum2=1;
                    break;
                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 't':
                case 'j':
                case 'k':
                case 'q':
                    sum2=10;
                    break;
                case 'a':
                    sum2=11;
                    break;
            }
            cin>>card3;
            switch(card3)
            {
                case '1':
                    sum3=1;
                    break;
                case '2':
                    sum3=2;
                    break;
                case '3':
                    sum3;
                    break;
                case '4':
                    sum3=4;
                    break;
                case '5':
                    sum3=5;
                    break;
                case '6':
                    sum3=6;
                    break;
                case '7':
                    sum3=7;
                    break;
                case '8':
                    sum3=8;
                    break;
                case '9':
                    sum3=9;
                    break;
                case 't':
                case 'j':
                case 'k':
                case 'q':
                    sum3=10;
                    break;
                case 'a':
                    sum3=11;
                    break;
            }
            cin>>card4;
            switch(card4)
            {
                case '1':
                    sum4=1;
                    break;
                case '2':
                    sum4=2;
                    break;
                case '3':
                    sum4;
                    break;
                case '4':
                    sum4=4;
                    break;
                case '5':
                    sum4=5;
                    break;
                case '6':
                    sum4=6;
                    break;
                case '7':
                    sum4=7;
                    break;
                case '8':
                    sum4=8;
                    break;
                case '9':
                    sum4=9;
                    break;
                case 't':
                case 'j':
                case 'k':
                case 'q':
                    sum4=10;
                    break;
                case 'a':
                    sum4=11;
                    break;
            }
            if(sum1!=11&&sum2!=11&&sum3!=11&sum4!=11)
            {
                cout<<"you got "<" points.";
            }
            else if((sum1==11&&sum2!=11&&sum3!=11&&sum4!=11)||(sum!=11&&sum2==11&&sum3!=11&&sum4!=11)||(sum1!=11&&sum2!=11&&sum3==11&&sum4!=11)||(sum1!=11&&sum2!=11&&sum3!=11&&sum4==11))
            {
                if(sum>21)
                {
                    points=sum-10;
                    cout<<"you got "<" points.";
                }
                else
                {
                    cout<<"you got "<" points.";
                }
            }
            else if((sum1==11&&sum2==11&&sum3==11&&sum4!=11)||(sum==11&&sum2==11&&sum3!=11&&sum4==11)||(sum1==11&&sum2!=11&&sum==11&&sum4==11)||(sum1!=11&&sum2==11&&sum3==11&&sum4==11))
            {
                if(sum>=24&&sum<=31)
                {
                    points=sum-10;
                    cout<<"you got "<" points.";
                }
                else
                {
                    points=sum-20;
                    cout<<"you got "<" points.";
                }
            }
            else if(sum1!=11&&sum2!=11&&sum3!=11&&sum4!=11)
            {
                cout<<"you got 14 points.";
            }
            else
            {
                if(sum>=35&&sum<=41)
                {
                    points=sum-20;
                    cout<<"you got "<" points.";
                }
                else
                {
                    points=sum-30;
                    cout<<"you got "<" points.";
                }
            }
            break;

        case 5:
            cout<<"please enter each one's points.1~9 fo r1~9,t for ten,j,k,q,a for J,K,Q,A.\n";
            cin>>card1;
            switch(card1)
            {
                case '1':
                    sum1=1;
                    break;
                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 't':
                case 'j':
                case 'k':
                case 'q':
                    sum1=10;
                    break;
                case 'a':
                    sum1=11;
                    break;
            }
            cin>>card2;
            switch(card2)
            {
                case '1':
                    sum2=1;
                    break;
                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 't':
                case 'j':
                case 'k':
                case 'q':
                    sum2=10;
                    break;
                case 'a':
                    sum2=11;
                    break;
            }
            cin>>card3;
            switch(card3)
            {
                case '1':
                    sum3=1;
                    break;
                case '2':
                    sum3=2;
                    break;
                case '3':
                    sum3=3;
                    break;
                case '4':
                    sum3=4;
                    break;
                case '5':
                    sum3=5;
                    break;
                case '6':
                    sum3=6;
                    break;
                case '7':
                    sum3=7;
                    break;
                case '8':
                    sum3=8;
                    break;
                case '9':
                    sum3=9;
                    break;
                case 't':
                case 'j':
                case 'k':
                case 'q':
                    sum3=10;
                    break;
                case 'a':
                    sum3=11;
                    break;
            }
            cin>>card4;
            switch(card4)
            {
                case '1':
                    sum4=1;
                    break;
                case '2':
                    sum4=2;
                    break;
                case '3':
                    sum4=3;
                    break;
                case '4':
                    sum4=4;
                    break;
                case '5':
                    sum4=5;
                    break;
                case '6':
                    sum4=6;
                    break;
                case '7':
                    sum4=7;
                    break;
                case '8':
                    sum4=8;
                    break;
                case '9':
                    sum4=9;
                    break;
                case 't':
                case 'j':
                case 'k':
                case 'q':
                    sum4=10;
                    break;
                case 'a':
                    sum4=11;
                    break;
            }
            cin>>card5;
            switch(card5)
            {
                case '1':
                    sum5=1;
                    break;
                case '2':
                    sum5=2;
                    break;
                case '3':
                    sum5=3;
                    break;
                case '4':
                    sum5=4;
                    break;
                case '5':
                    sum5=5;
                    break;
                case '6':
                    sum5=6;
                    break;
                case '7':
                    sum5=7;
                    break;
                case '8':
                    sum5=8;
                    break;
                case '9':
                    sum5=9;
                    break;
                case 't':
                case 'j':
                case 'k':
                case 'q':
                    sum5=10;
                    break;
                case 'a':
                    sum5=11;
                    break;
            }
          if(sum1!=11&&sum2!=11&&sum3!=11&sum4!=11&&sum5!=11)
            {
                cout<<"you got "<" points.";
            }
            else if((sum1==11&&sum2!=11&&sum3!=11&&sum4!=11&&sum5!=11)||(sum!=11&&sum2==11&&sum3!=11&&sum4!=11&&sum5!=11)||(sum1!=11&&sum2!=11&&sum3==11&&sum4!=11&&sum5!=11)||(sum1!=11&&sum2!=11&&sum3!=11&&sum4==11&&sum5!=11)||(sum1!=11&&sum2!=11&&sum3!=11&&sum4!=117&sum5==11))
            {
                if(sum>21)
                {
                    points=sum-10;
                    cout<<"you got "<" points.";
                }
                else
                {
                    cout<<"you got "<" points.";
                }
            }
            else if((sum1==11&&sum2==11&&sum3==11&&sum4!=11&&sum5!=11)||(sum==11&&sum2==11&&sum3!=11&&sum4==11&&sum5!=11)||(sum1==11&&sum2!=11&&sum==11&&sum4==11&&sum5!=11)||(sum1!=11&&sum2==11&&sum3==11&&sum4==11&&sum5!=11)||(sum1!=11&&sum2!=11&&sum3==11&&sum4==11&&sum5==11)||(sum1!=11&&sum2==11&&sum3!=11&&sum4==11&&sum5==11)||(sum1!=11&&sum2==11&&sum3==11&&sum4!=11&&sum5==1)||(sum1==11&&sum2!=11&&sum3!=11&sum4==11&&sum5==11)||(sum1==11&&sum2!=11&&sum3==11&&sum4!=11&&sum5==11)||(sum1==11&&sum2==1&&sum3!=1&&sum4!=11&&sum5==11))
            {
                if(sum>=25&&sum<=31)
                {
                    points=sum-10;
                    cout<<"you got "<" points.";
                }
                else
                {
                    points=sum-20;
                    cout<<"you got "<" points.";
                }
            }
            else if(sum1!=11&&sum2!=11&&sum3!=11&&sum4!=11&&sum5!=11)
            {
                cout<<"you got 15 points.";
            }
            else
            {
                if(sum>=35&&sum<=41)
                {
                    points=sum-20;
                    cout<<"you got "<" points.";
                }
                else
                {
                    points=sum-30;
                    cout<<"you got "<" points.";
                }
            }
            break;
        default:
            cout<<"you only can take 2~5 cards.";
            break;
    }
}

运行后各种出错 同时也觉得自己写复杂了 求指点

老师看了想死的心都有了

typedef struct

{                        

    char info;  //关联字符信息

    unsigned int weight; //每个节点的权值

    unsigned int parent, lchild, rchild;

}HTNode,*HuffmanTree;

typedef char **HuffmanCode;

int n,*w;

char *info;

HuffmanTree HT; //存储哈弗曼树

HuffmanCode HC; //存储哈弗曼编码

void Select(HuffmanTree HT, int j,int &s1,int &s2)

{//选择双亲节点为0,并且最小的两个子叶节点

    ………..

}

void HuffmanCoding(HuffmanTree &HT, HuffmanCode &HC, int *w, int n,char *info) {

  // 算法6.12

  // w存放n个字符的权值(均>0),构造哈夫曼树HT,

  // 并求出n个字符的哈夫曼编码HC

  int i, j, m, s1, s2, start;

  char *cd;

  unsigned int c, f;

  if (n<=1) return;

  m = 2 * n - 1;

  HT = (HuffmanTree)malloc((m+1) * sizeof(HTNode));  // 0号单元未用

  for (i=1; i<=n; i++) { //初始化

    HT[i].weight=w[i-1];

    HT[i].info=info[i-1];

    HT[i].parent=0;

    HT[i].lchild=0;

    HT[i].rchild=0;

  }

  for (i=n+1; i<=m; i++) { //初始化

    HT[i].weight=0;

    HT[i].parent=0;

    HT[i].lchild=0;

    HT[i].rchild=0;

  }

  printf("\n哈夫曼树的构造过程如下所示:\n");

  printf("HT初态:\n  结点  weight  parent  lchild  rchild");

  for (i=1; i<=m; i++)

    printf("\n%4d%8d%8d%8d%8d",i,HT[i].weight,

            HT[i].parent,HT[i].lchild, HT[i].rchild);

    printf("    按任意键,继续 ...");

  getch();

  for (i=n+1; i<=m; i++) {  // 建哈夫曼树

    // 在HT[1..i-1]中选择parent为0且weight最小的两个结点,

    // 其序号分别为s1和s2。

    Select(HT, i-1, s1, s2);

    HT[s1].parent = i;  HT[s2].parent = i;

    HT[i].lchild = s1;  HT[i].rchild = s2;

    HT[i].weight = HT[s1].weight + HT[s2].weight;

    printf("\nselect: s1=%d   s2=%d\n", s1, s2);

    printf("  结点  weight  parent  lchild  rchild");

    for (j=1; j<=i; j++)

      printf("\n%4d%8d%8d%8d%8d",j,HT[j].weight,

             HT[j].parent,HT[j].lchild, HT[j].rchild);

    printf("    按任意键,继续 ...");

    getch();

  }

 

  //--- 从叶子到根逆向求每个字符的哈夫曼编码 ---

  HC=(HuffmanCode)malloc((n+1)*sizeof(char *));

  cd = (char *)malloc(n*sizeof(char));    // 分配求编码的工作空间

  cd[n-1] = '\0';                         // 编码结束符。

  for (i=1; i<=n; ++i) {                  // 逐个字符求哈夫曼编码

    start = n-1;                          // 编码结束符位置

    for (c=i, f=HT[i].parent; f!=0; c=f, f=HT[f].parent)

      // 从叶子到根逆向求编码

      if (HT[f].lchild==c) cd[--start] = '0';

      else cd[--start] = '1';

    HC[i] = (char *)malloc((n-start)*sizeof(char));

         // 为第i个字符编码分配空间

    strcpy(HC[i], &cd[start]);    // 从cd复制编码(串)到HC

  }

  free(cd);   // 释放工作空间

} // HuffmanCoding

 

 

void CheckCoding()

{      // 将ToBeTra中的正文进行译码并存入CodeFile

   ……..

}

 

void HuffmanTranslate()

 {       //将CodeFile中的代码进行译码并存入Textfile

    …….

 }

 

main()

{   printf("---------------------------------------------\n");

    printf("       赫夫曼编码和译码       \n");

    printf("        1.初始化               \n");

    printf("        2.输入对应的正文内容   \n") ;

    printf("        3.进行赫夫曼编码       \n");

    printf("        4.进行赫夫曼编码       \n") ;

    printf("        5.退出赫夫曼操作       \n");

    printf("       请输入1.2.3.4.5          \n");

    printf(" ---------------------------------------------\n");

    ………

}