Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.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 - Fatal编程技术网

C 扑克游戏,双人、三人和扑克的坏信号

C 扑克游戏,双人、三人和扑克的坏信号,c,C,我试着做一个Ditels的问题,C如何编程-第七版“书。书上说我应该处理两张五张牌的牌,看看哪一张更好。我甚至没有做到牌的比较,我有一个很大的问题。 在我给你们的这段代码中,一对、三对、扑克牌、同花顺和直牌的信号都不好。如果有两对牌,它们应该变成2,这只是信号“对”,和1,如果程序找到一对,三类,四类,直的或齐平的。相反,它总是给我一个大于1的数字,即使我将变量设置为等于0、1或2。(请参阅我的代码中的第一个开关函数。) 输出是好的,它正确地告诉我我手里有什么,但增量和等式语句不是,它给了我垃圾

我试着做一个Ditels的问题,C如何编程-第七版“书。书上说我应该处理两张五张牌的牌,看看哪一张更好。我甚至没有做到牌的比较,我有一个很大的问题。 在我给你们的这段代码中,一对、三对、扑克牌、同花顺和直牌的信号都不好。如果有两对牌,它们应该变成2,这只是信号“对”,和1,如果程序找到一对,三类,四类,直的或齐平的。相反,它总是给我一个大于1的数字,即使我将变量设置为等于0、1或2。(请参阅我的代码中的第一个开关函数。) 输出是好的,它正确地告诉我我手里有什么,但增量和等式语句不是,它给了我垃圾。 你能告诉我我做错了什么吗?它是我函数的if{do while}部分还是

#ifndef FUNCTIONS_H
#define FUNCTIONS_H
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define SUITS 4
#define FACES 13
#define CARDS 52

void deal( unsigned int wDeck[][ FACES ], const char *wFace[],const char *wSuit[], char hand[6][150] ){
size_t row;
size_t column;
size_t card;

for ( card = 0; card <= 5; ++card ) {
    for ( row = 0; row < SUITS; ++row ) {
        for ( column = 0; column < FACES; ++column ) {
            if ( wDeck[ row ][ column ] == card ) {
                strcat(hand[card],wFace[column]);
                strcat(hand[card]," ");
                strcat(hand[card],wSuit[row]);
            }
        }
    }
}
}

void shuffle( unsigned int wDeck[][ FACES ] ) {
  size_t row;
  size_t column;
  size_t card;

   for ( card = 1; card <= CARDS; ++card ) {
     do {
         row = rand() % SUITS;
         column = rand() % FACES;
     } while( wDeck[ row ][ column ] != 0 );

     wDeck[ row ][ column ] = card;
 }
}

int fixNshow (char hand[6][150], char handFIXED[5][150]){
char faces[5][20];
char suits[5][20];
char *token;

for(int i=0; i<5; i++){
    strcpy(handFIXED[i],hand[i+1]);
}
for(int i=0; i<5; i++){
    printf("%s\n",handFIXED[i]);
}

for(int i=0; i<5; i++){
   token=strtok(handFIXED[i]," ");
     if(token!=NULL){
       strcpy(faces[i],token);
       token=strtok(NULL," ");
       if(token!=NULL){
         strcpy(suits[i],token);
       }
     }
}
printf("\n");

//Evaluating the hand.

int pair=0;
int three=0;
int poker=0;
int flush=0;
int straight=0;
int no=0;
int tokentwo=0;
int pass=2;
int j=1;
int g=1;
char faceatm[5][20],suitatm[20];
int hardness[4];
int swap=0;
int temp=0;
int totalpoints=0;
int highcard=0;
//Pairs, tripples, pokers, two pairs
for(int i=0; i<5; i++){
    j=i+1;
    g=i;
    no=0;
    strcpy(faceatm[i],faces[i]);

    if(i>0){                                    //THIS
        do{                                     //WHOLE
            pass=strcmp(faceatm[i],faceatm[g-1]);//PART RESOLVES
            g--;                                  //DUPLICATE
            if (pass==0){                         //APPEARANCE
                break;                            //OF
            }                                     //MATCHES
        }while(g>0);                              //EXAMPLE
    }                                             //JACK
    if (pass==0){                                 //JACK JACK
        continue;                                 //TEN, QUEEN
    }                                             //SIGNALS THAT ARE EQUAL TO 1 ARE: TRIPPLE,PAIR. THIS PREVENTS IT.

    if(j<5){
      do{
         tokentwo=strcmp(faceatm[i],faces[j]);
          if(tokentwo==0){
              no++;
              printf("ITERATION NUMBER %d, NO=%d\n",i,no);
           }
           j++;
       }while(j<5);
    }
    switch(no){
        case 1: printf("Pair of %ss\n",faceatm[i]); pair++;  break;
        case 2: printf("Three of %ss\n",faceatm[i]); three++;  break;
        case 3: printf("Poker of %ss\n",faceatm[i]); poker++; break;
    }
}
//Flush catcher
strcpy(suitatm,suits[0]);
do{
  tokentwo=strcmp(suitatm,suits[j]);
  if(tokentwo==0){
    no++;
  }
  j++;
}while(j<5);
if(no==4){
    printf("FLUSH OF %s",suitatm);
    flush++;
}
//Straight catcher
for(int i=0; i<5; i++){
    if(strcmp("Ace",faces[i])==0){
        hardness[i]=1;
    }
    else if(strcmp("Deuce",faces[i])==0){
       hardness[i]=2;
    }
    else if(strcmp("Three",faces[i])==0){
        hardness[i]=3;
    }
    else if(strcmp("Four",faces[i])==0){
       hardness[i]=4;
    }
    else if(strcmp("Five",faces[i])==0){
       hardness[i]=5;
    }
    else if(strcmp("Six",faces[i])==0){
       hardness[i]=6;
    }
    else if(strcmp("Seven",faces[i])==0){
       hardness[i]=7;
    }
    else if(strcmp("Eight",faces[i])==0){
       hardness[i]=8;
    }
    else if(strcmp("Nine",faces[i])==0){
       hardness[i]=9;
    }
    else if(strcmp("Ten",faces[i])==0){
       hardness[i]=10;
    }
    else if(strcmp("Jack",faces[i])==0){
       hardness[i]=11;
    }
    else if(strcmp("Queen",faces[i])==0){
       hardness[i]=12;
    }
    else if(strcmp("King",faces[i])==0){
       hardness[i]=13;
    }
}

for(int i=0; i<5; i++){
    for(int j=0; j<5; j++){
        if(hardness[i]>hardness[i+1]){
            swap=hardness[i];
            hardness[i]=hardness[i+1];
            hardness[i+1]=swap;
        }
    }
}
if(hardness[0]==hardness[1]-1==hardness[2]-2==hardness[3]-3==hardness[4]-4){
    straight++;
}
//End of hand evaluation
//Points
highcard=hardness[4];
    if(pair==0 && three==0 && poker==0 && straight==0 && flush==0){totalpoints=highcard;}
    else if(pair==1 && three==0 && poker==0 && straight==0 && flush==0){totalpoints=14;}
    else if(pair==2 && three==0 && poker==0 && straight==0 && flush==0){totalpoints=15;}
    else if(pair==0 && three==1 && poker==0 && straight==0 && flush==0){totalpoints=16;}
    else if(pair==0 && three==0 && poker==0 && straight==1 && flush==0){totalpoints=17;}
    else if(pair==0 && three==0 && poker==0 && straight==0 && flush==1){totalpoints=18;}
    else if(pair==1 && three==1 && poker==0 && straight==0 && flush==0){totalpoints=19;}
    else if(pair==0 && three==0 && poker==1 && straight==0 && flush==0){totalpoints=20;}
    else if(pair==0 && three==0 && poker==0 && straight==1 && flush==1){ 
        if(hardness[0]==1 && hardness[1]==10 && hardness[2]==11 && hardness[3]==12 && hardness[4]==13){
            totalpoints=22;
        }
        else {
            totalpoints=21;
        }    
    }
return totalpoints;
}
#endif
所以,当我运行游戏时,我的输出是:

Ace Diamonds
Five Clubs
Five Spades
Jack Spades
Five Hearts

ITERATION NUMBER 1, NO=1
ITERATION NUMBER 1, NO=2
Three of Fives
HAND STRONGNESS: 19
RUN SUCCESSFUL (total time: 347ms)
它给了我一个很好的关于我手上有什么的信息,但是这只手的力量绝对不是好的。这意味着我的配对信号是1,它不应该是


我做错了什么

乍一看,可能与您的问题无关:看起来好像您实现了标题
functions.h
中的扑克功能。在这个简单的程序中,这并不重要,但是头应该只将接口(即函数原型、类型和结构定义)导出到
function.c
中的实现中。此外,
如果(a==b==c==d)
没有按照您的想法执行。您必须将这种比较与逻辑运算符
&&
|
链接起来:
如果(a==b&&a==c&&a==d).
(打开警告时很容易发现这种错误。)一对、三对、扑克牌的信号,flush和straight不好不是一个特别的描述性诊断,它不能告诉我们您已经尝试了什么,以便自己调试。(此外,没有像“扑克牌”这样的牌手等级……也许你这里指的是四种牌手?)奇怪的强项可能来自
fixNshow
中未初始化的
totalpoints
。您的案例都不匹配,因此它不会被合理的值覆盖,您会得到垃圾。将卡片套装和等级表示为字符串也不是一个好主意。更好的方法是将卡片表示为两个枚举的结构(一个用于排名,一个用于套装),然后创建打印卡片的打印函数。等级的枚举将直接映射到一个值(除了ace可能是最低或最高的,但无论如何都必须在上下文中确定)。乍一看,这可能与您的问题无关:看起来好像您在标题
functions.h
中实现了扑克功能。在这个简单的程序中,这并不重要,但是头应该只将接口(即函数原型、类型和结构定义)导出到
function.c
中的实现中。此外,
如果(a==b==c==d)
没有按照您的想法执行。您必须将这种比较与逻辑运算符
&&
|
链接起来:
如果(a==b&&a==c&&a==d).
(打开警告时很容易发现这种错误。)一对、三对、扑克牌的信号,flush和straight不好不是一个特别的描述性诊断,它不能告诉我们您已经尝试了什么,以便自己调试。(此外,没有像“扑克牌”这样的牌手等级……也许你这里指的是四种牌手?)奇怪的强项可能来自
fixNshow
中未初始化的
totalpoints
。您的案例都不匹配,因此它不会被合理的值覆盖,您会得到垃圾。将卡片套装和等级表示为字符串也不是一个好主意。更好的方法是将卡片表示为两个枚举的结构(一个用于排名,一个用于套装),然后创建打印卡片的打印函数。列组的枚举将直接映射到一个值(ace可能是最低或最高的,但无论如何必须在上下文中确定除外)
Ace Diamonds
Five Clubs
Five Spades
Jack Spades
Five Hearts

ITERATION NUMBER 1, NO=1
ITERATION NUMBER 1, NO=2
Three of Fives
HAND STRONGNESS: 19
RUN SUCCESSFUL (total time: 347ms)