Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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++;代码可以编译,但不会';跑不动 我现在正在编写一个德克萨斯HOLDE代码,以便了解更多关于C++的知识,并获得经验。但我最近遇到了一个问题,我不知道该怎么办。我的代码编译得很好,没有错误,但一旦我让它运行并到达一个特定的函数,它就会停止工作(就像我从CodeBlock收到一个错误,说你的程序已经停止工作一样)。我试着在函数中删掉一些部分,比如循环,看看哪个部分是问题所在,但几天后我还是停了下来。 以下是我认为存在问题的函数和类: class Player{ string name; int bank=100; static string cards[53]; static string final_card[2][6]; static string table_cards[5]; public: void set_name(string a){name=a;} string print_name(){return name;} void card_generator(); string set_cards(int c){return cards[c];} int print_bank(){return bank;} void set_final_card(int i, int max_i); void print_cards(){for(int i=0;i<6;i++){cout<<final_card[0][i]<<endl;}} }; void Player::set_final_card(int i, int max_i){ srand(time(NULL)); int tempV = 17;//create temp cards string tempCards[tempV]; int randNB[tempV]; int check1 = 0, tmp; while (check1==0){ for(int g=0; g<tempV;g++){ tempCards[g]=cards[rand()%53]; check1=1; tmp = g - 1; for(int o=tmp; o!=0; o--){ if (tempCards[g]==tempCards[o]){ check1=0; } } } } int p=0,k; while(p<6){ k=0; final_card[0][k]=tempCards[p]; k++; p++; } while(p<12){ k=0; final_card[1][k]=tempCards[p]; k++; p++; } while(p<17){ k=0; table_cards[k]=tempCards[p]; k++; p++; } } #include <iostream> #include <string> #include <stdlib.h> #include <ctime> using namespace std; class Player{ string name; int bank=100; static string cards[53]; static string final_card[2][6]; static string table_cards[5]; public: void set_name(string a){name=a;} string print_name(){return name;} void card_generator(); string set_cards(int c){return cards[c];} int print_bank(){return bank;} void set_final_card(int i, int max_i); void print_cards(){for(int i=0;i<6;i++){cout<<final_card[0][i]<<endl;}} }; string Player::cards[53]; string Player::final_card[2][6]; string Player::table_cards[5]; int main () { int choice1=0, i, max_i, tempV; string username; cout<< "Welcome to Texas Hold'Em!\n1-Play\n2-Quit\n";//menu while((choice1!=1)&&(choice1!=2)){//Makes sure that user enters correct input``` cin>>choice1; if ((choice1!=1)&&(choice1!=2)){ cout<<"Invalid Input!\nTry again!\n"; } } system ("cls"); if (choice1==2){//End Program return 0; } cout<<"How many players?[2-6]"<<endl; while((i!=2)&&(i!=3)&&(i!=4)&&(i!=5)&&(i!=6)){//Makes sure that user enters correct input cin>>i; if ((i!=2)&&(i!=3)&&(i!=4)&&(i!=5)&&(i!=6)){ cout<<"Invalid Input!\nTry again!\n"; } } Player player[i];//creating array of players player[0].card_generator(); max_i = i;//max_i is nb of players i--;//since arrays start at 0 system("cls"); player[0].set_final_card(i,max_i); player[0].print_cards(); if (choice1==1) {//SET NAMES OF ALL PLAYERS for(i=0; i<max_i; i++){ cout<< "Whats your name?\n"; cin>>username; player[i].set_name(username); cout<<"Your name is "<< player[i].print_name()<< " and you have "<< player[i].print_bank()<<"$\n"; tempV=i+1;//used bc arrays start at 0 if(tempV!=max_i){ cout<< "Give PC to player "<< i+2 <<endl; } _sleep(3000); system("cls"); } } return 0; } void Player::set_final_card(int i, int max_i){ srand(time(NULL)); int tempV = 17;//create temp cards string tempCards[tempV]; int randNB[tempV]; int check1 = 0, tmp; while (check1==0){ for(int g=0; g<tempV;g++){ tempCards[g]=cards[rand()%53]; check1=1; tmp = g - 1; for(int o=tmp; o!=0; o--){ if (tempCards[g]==tempCards[o]){ check1=0; } } } } int p=0,k; while(p<6){ k=0; final_card[0][k]=tempCards[p]; k++; p++; } while(p<12){ k=0; final_card[1][k]=tempCards[p]; k++; p++; } while(p<17){ k=0; table_cards[k]=tempCards[p]; k++; p++; } } void Player::card_generator(){ string card_value[13]; card_value[0]="1"; card_value[1]="2"; card_value[2]="3"; card_value[3]="4"; card_value[4]="5"; card_value[5]="6"; card_value[6]="7"; card_value[7]="8"; card_value[8]="9"; card_value[9]="10"; card_value[10]="J"; card_value[11]="Q"; card_value[12]="K"; string card_type[4]; card_type[0]="of hearts"; card_type[1]="of diamonds"; card_type[2]="of clubs"; card_type[3]="of spades"; string card[53]; int x=0; fill_n(card,53,0); for (int j=0;j<4;j++){ for (int q=0;q<13;q++){ card[x]=card_value[q]+" "+card_type[j]; cards[x]=card[x]; x++; } } } 职业玩家{ 字符串名; 国际银行=100; 静态字符串卡[53]; 静态字符串最终_卡[2][6]; 静态字符串表_卡[5]; 公众: void set_name(字符串a){name=a;} 字符串print_name(){return name;} 无效卡_生成器(); 字符串集_卡片(int c){返回卡片[c];} int print_bank(){return bank;} 无效集\最终\卡(整数i,整数最大\ i); 无效打印卡(){for(int i=0;i_C++ - Fatal编程技术网

C++;代码可以编译,但不会';跑不动 我现在正在编写一个德克萨斯HOLDE代码,以便了解更多关于C++的知识,并获得经验。但我最近遇到了一个问题,我不知道该怎么办。我的代码编译得很好,没有错误,但一旦我让它运行并到达一个特定的函数,它就会停止工作(就像我从CodeBlock收到一个错误,说你的程序已经停止工作一样)。我试着在函数中删掉一些部分,比如循环,看看哪个部分是问题所在,但几天后我还是停了下来。 以下是我认为存在问题的函数和类: class Player{ string name; int bank=100; static string cards[53]; static string final_card[2][6]; static string table_cards[5]; public: void set_name(string a){name=a;} string print_name(){return name;} void card_generator(); string set_cards(int c){return cards[c];} int print_bank(){return bank;} void set_final_card(int i, int max_i); void print_cards(){for(int i=0;i<6;i++){cout<<final_card[0][i]<<endl;}} }; void Player::set_final_card(int i, int max_i){ srand(time(NULL)); int tempV = 17;//create temp cards string tempCards[tempV]; int randNB[tempV]; int check1 = 0, tmp; while (check1==0){ for(int g=0; g<tempV;g++){ tempCards[g]=cards[rand()%53]; check1=1; tmp = g - 1; for(int o=tmp; o!=0; o--){ if (tempCards[g]==tempCards[o]){ check1=0; } } } } int p=0,k; while(p<6){ k=0; final_card[0][k]=tempCards[p]; k++; p++; } while(p<12){ k=0; final_card[1][k]=tempCards[p]; k++; p++; } while(p<17){ k=0; table_cards[k]=tempCards[p]; k++; p++; } } #include <iostream> #include <string> #include <stdlib.h> #include <ctime> using namespace std; class Player{ string name; int bank=100; static string cards[53]; static string final_card[2][6]; static string table_cards[5]; public: void set_name(string a){name=a;} string print_name(){return name;} void card_generator(); string set_cards(int c){return cards[c];} int print_bank(){return bank;} void set_final_card(int i, int max_i); void print_cards(){for(int i=0;i<6;i++){cout<<final_card[0][i]<<endl;}} }; string Player::cards[53]; string Player::final_card[2][6]; string Player::table_cards[5]; int main () { int choice1=0, i, max_i, tempV; string username; cout<< "Welcome to Texas Hold'Em!\n1-Play\n2-Quit\n";//menu while((choice1!=1)&&(choice1!=2)){//Makes sure that user enters correct input``` cin>>choice1; if ((choice1!=1)&&(choice1!=2)){ cout<<"Invalid Input!\nTry again!\n"; } } system ("cls"); if (choice1==2){//End Program return 0; } cout<<"How many players?[2-6]"<<endl; while((i!=2)&&(i!=3)&&(i!=4)&&(i!=5)&&(i!=6)){//Makes sure that user enters correct input cin>>i; if ((i!=2)&&(i!=3)&&(i!=4)&&(i!=5)&&(i!=6)){ cout<<"Invalid Input!\nTry again!\n"; } } Player player[i];//creating array of players player[0].card_generator(); max_i = i;//max_i is nb of players i--;//since arrays start at 0 system("cls"); player[0].set_final_card(i,max_i); player[0].print_cards(); if (choice1==1) {//SET NAMES OF ALL PLAYERS for(i=0; i<max_i; i++){ cout<< "Whats your name?\n"; cin>>username; player[i].set_name(username); cout<<"Your name is "<< player[i].print_name()<< " and you have "<< player[i].print_bank()<<"$\n"; tempV=i+1;//used bc arrays start at 0 if(tempV!=max_i){ cout<< "Give PC to player "<< i+2 <<endl; } _sleep(3000); system("cls"); } } return 0; } void Player::set_final_card(int i, int max_i){ srand(time(NULL)); int tempV = 17;//create temp cards string tempCards[tempV]; int randNB[tempV]; int check1 = 0, tmp; while (check1==0){ for(int g=0; g<tempV;g++){ tempCards[g]=cards[rand()%53]; check1=1; tmp = g - 1; for(int o=tmp; o!=0; o--){ if (tempCards[g]==tempCards[o]){ check1=0; } } } } int p=0,k; while(p<6){ k=0; final_card[0][k]=tempCards[p]; k++; p++; } while(p<12){ k=0; final_card[1][k]=tempCards[p]; k++; p++; } while(p<17){ k=0; table_cards[k]=tempCards[p]; k++; p++; } } void Player::card_generator(){ string card_value[13]; card_value[0]="1"; card_value[1]="2"; card_value[2]="3"; card_value[3]="4"; card_value[4]="5"; card_value[5]="6"; card_value[6]="7"; card_value[7]="8"; card_value[8]="9"; card_value[9]="10"; card_value[10]="J"; card_value[11]="Q"; card_value[12]="K"; string card_type[4]; card_type[0]="of hearts"; card_type[1]="of diamonds"; card_type[2]="of clubs"; card_type[3]="of spades"; string card[53]; int x=0; fill_n(card,53,0); for (int j=0;j<4;j++){ for (int q=0;q<13;q++){ card[x]=card_value[q]+" "+card_type[j]; cards[x]=card[x]; x++; } } } 职业玩家{ 字符串名; 国际银行=100; 静态字符串卡[53]; 静态字符串最终_卡[2][6]; 静态字符串表_卡[5]; 公众: void set_name(字符串a){name=a;} 字符串print_name(){return name;} 无效卡_生成器(); 字符串集_卡片(int c){返回卡片[c];} int print_bank(){return bank;} 无效集\最终\卡(整数i,整数最大\ i); 无效打印卡(){for(int i=0;i

C++;代码可以编译,但不会';跑不动 我现在正在编写一个德克萨斯HOLDE代码,以便了解更多关于C++的知识,并获得经验。但我最近遇到了一个问题,我不知道该怎么办。我的代码编译得很好,没有错误,但一旦我让它运行并到达一个特定的函数,它就会停止工作(就像我从CodeBlock收到一个错误,说你的程序已经停止工作一样)。我试着在函数中删掉一些部分,比如循环,看看哪个部分是问题所在,但几天后我还是停了下来。 以下是我认为存在问题的函数和类: class Player{ string name; int bank=100; static string cards[53]; static string final_card[2][6]; static string table_cards[5]; public: void set_name(string a){name=a;} string print_name(){return name;} void card_generator(); string set_cards(int c){return cards[c];} int print_bank(){return bank;} void set_final_card(int i, int max_i); void print_cards(){for(int i=0;i<6;i++){cout<<final_card[0][i]<<endl;}} }; void Player::set_final_card(int i, int max_i){ srand(time(NULL)); int tempV = 17;//create temp cards string tempCards[tempV]; int randNB[tempV]; int check1 = 0, tmp; while (check1==0){ for(int g=0; g<tempV;g++){ tempCards[g]=cards[rand()%53]; check1=1; tmp = g - 1; for(int o=tmp; o!=0; o--){ if (tempCards[g]==tempCards[o]){ check1=0; } } } } int p=0,k; while(p<6){ k=0; final_card[0][k]=tempCards[p]; k++; p++; } while(p<12){ k=0; final_card[1][k]=tempCards[p]; k++; p++; } while(p<17){ k=0; table_cards[k]=tempCards[p]; k++; p++; } } #include <iostream> #include <string> #include <stdlib.h> #include <ctime> using namespace std; class Player{ string name; int bank=100; static string cards[53]; static string final_card[2][6]; static string table_cards[5]; public: void set_name(string a){name=a;} string print_name(){return name;} void card_generator(); string set_cards(int c){return cards[c];} int print_bank(){return bank;} void set_final_card(int i, int max_i); void print_cards(){for(int i=0;i<6;i++){cout<<final_card[0][i]<<endl;}} }; string Player::cards[53]; string Player::final_card[2][6]; string Player::table_cards[5]; int main () { int choice1=0, i, max_i, tempV; string username; cout<< "Welcome to Texas Hold'Em!\n1-Play\n2-Quit\n";//menu while((choice1!=1)&&(choice1!=2)){//Makes sure that user enters correct input``` cin>>choice1; if ((choice1!=1)&&(choice1!=2)){ cout<<"Invalid Input!\nTry again!\n"; } } system ("cls"); if (choice1==2){//End Program return 0; } cout<<"How many players?[2-6]"<<endl; while((i!=2)&&(i!=3)&&(i!=4)&&(i!=5)&&(i!=6)){//Makes sure that user enters correct input cin>>i; if ((i!=2)&&(i!=3)&&(i!=4)&&(i!=5)&&(i!=6)){ cout<<"Invalid Input!\nTry again!\n"; } } Player player[i];//creating array of players player[0].card_generator(); max_i = i;//max_i is nb of players i--;//since arrays start at 0 system("cls"); player[0].set_final_card(i,max_i); player[0].print_cards(); if (choice1==1) {//SET NAMES OF ALL PLAYERS for(i=0; i<max_i; i++){ cout<< "Whats your name?\n"; cin>>username; player[i].set_name(username); cout<<"Your name is "<< player[i].print_name()<< " and you have "<< player[i].print_bank()<<"$\n"; tempV=i+1;//used bc arrays start at 0 if(tempV!=max_i){ cout<< "Give PC to player "<< i+2 <<endl; } _sleep(3000); system("cls"); } } return 0; } void Player::set_final_card(int i, int max_i){ srand(time(NULL)); int tempV = 17;//create temp cards string tempCards[tempV]; int randNB[tempV]; int check1 = 0, tmp; while (check1==0){ for(int g=0; g<tempV;g++){ tempCards[g]=cards[rand()%53]; check1=1; tmp = g - 1; for(int o=tmp; o!=0; o--){ if (tempCards[g]==tempCards[o]){ check1=0; } } } } int p=0,k; while(p<6){ k=0; final_card[0][k]=tempCards[p]; k++; p++; } while(p<12){ k=0; final_card[1][k]=tempCards[p]; k++; p++; } while(p<17){ k=0; table_cards[k]=tempCards[p]; k++; p++; } } void Player::card_generator(){ string card_value[13]; card_value[0]="1"; card_value[1]="2"; card_value[2]="3"; card_value[3]="4"; card_value[4]="5"; card_value[5]="6"; card_value[6]="7"; card_value[7]="8"; card_value[8]="9"; card_value[9]="10"; card_value[10]="J"; card_value[11]="Q"; card_value[12]="K"; string card_type[4]; card_type[0]="of hearts"; card_type[1]="of diamonds"; card_type[2]="of clubs"; card_type[3]="of spades"; string card[53]; int x=0; fill_n(card,53,0); for (int j=0;j<4;j++){ for (int q=0;q<13;q++){ card[x]=card_value[q]+" "+card_type[j]; cards[x]=card[x]; x++; } } } 职业玩家{ 字符串名; 国际银行=100; 静态字符串卡[53]; 静态字符串最终_卡[2][6]; 静态字符串表_卡[5]; 公众: void set_name(字符串a){name=a;} 字符串print_name(){return name;} 无效卡_生成器(); 字符串集_卡片(int c){返回卡片[c];} int print_bank(){return bank;} 无效集\最终\卡(整数i,整数最大\ i); 无效打印卡(){for(int i=0;i,c++,C++,不要这样做。此使用从数百个std命名空间导入所有名称。只导入您实际需要的名称,或者,编写std::time而不是非限定的time。这非常清楚地表明您指的是来自的时间标准库,而不是您自己定义的库 class Player{ string name; int bank=100; static string cards[53]; static string final_card[2][6]; static string table_cards[5]; 卡片不应

不要这样做。此
使用
从数百个
std
命名空间导入所有名称。只导入您实际需要的名称,或者,编写
std::time
而不是非限定的
time
。这非常清楚地表明您指的是来自的
时间标准库,而不是您自己定义的库

class Player{
    string name;
    int bank=100;
    static string cards[53];
    static string final_card[2][6];
    static string table_cards[5];
卡片不应表示为字符串,而应表示为称为
Card
的单独数据类型,具有
suit
rank
等属性以及
to_string
方法

    public:
    void set_name(string a){name=a;}
要使程序快速,请将
a
作为
const std::string&
传递,而不是简单的
string
。这将防止数据复制。您应该为参数指定更好的名称,例如
void set_name(const std::string&name){This.name=name;}

    string print_name(){return name;}
此方法不打印任何内容,因此不能调用
print\u name

    void card_generator();
方法通常用动词命名,而不是名词。因此
generate\u cards
会是一个更好的名称。但是
generate
在这里是什么意思?(我不是英语母语,但
draw\u cards
会准确描述它吗?)

一个名为
set.*
的方法通常会修改某些内容。这个方法不会。为什么这样命名

    int print_bank(){return bank;}
    void set_final_card(int i, int max_i);
为参数提供更好的名称。仅阅读此声明,我不知道
I
max_I
可能意味着什么

    void print_cards(){for(int i=0;i<6;i++){cout<<final_card[0][i]<<endl;}}
};

    string Player::cards[53];
    string Player::final_card[2][6];
    string Player::table_cards[5];
在读取
choice1
变量之前,必须对其进行初始化。由于不进行初始化,因此会调用未定义的行为,并且程序在此之后执行的所有操作都是不可预测的

    cin>>choice1;
    if ((choice1!=1)&&(choice1!=2)){
        cout<<"Invalid Input!\nTry again!\n";
    }
  }
  system ("cls");
  if (choice1==2){//End Program
    return 0;
  }
  cout<<"How many players?[2-6]"<<endl;
  while((i!=2)&&(i!=3)&&(i!=4)&&(i!=5)&&(i!=6)){//Makes sure that user enters correct input
通过将每个输入包含在if子句中,为其添加错误处理:
if(std::cin>>i){

    if ((i!=2)&&(i!=3)&&(i!=4)&&(i!=5)&&(i!=6)){
        cout<<"Invalid Input!\nTry again!\n";
    }
  }
  Player player[i];//creating array of players
当评论说
max\u players
将是一个更好的名称时,为什么要将此变量称为
max\u i

  i--;//since arrays start at 0
  system("cls");

  player[0].set_final_card(i,max_i);
  player[0].print_cards();

  if (choice1==1) {//SET NAMES OF ALL PLAYERS
    for(i=0; i<max_i; i++){
        cout<< "Whats your name?\n";
        cin>>username;
        player[i].set_name(username);
        cout<<"Your name is "<< player[i].print_name()<< " and you have "<<                 player[i].print_bank()<<"$\n";

        tempV=i+1;//used bc arrays start at 0
        if(tempV!=max_i){
这17是一个神奇的数字,最好写成5+6*2,因为这样会更清楚

    string tempCards[tempV];
    int randNB[tempV];

    int check1 = 0, tmp;
    while (check1==0){
        for(int g=0; g<tempV;g++){

            tempCards[g]=cards[rand()%53];

Giraffe船长在评论中回答了这个问题。如果像我这样的新手遇到类似的问题,请查看调试器是什么,因为这样的错误称为运行时错误。查看此页面以获得简单的解释:。

srand(time(NULL));
-您只想在程序中调用此项一次。请在main
的开始处查看(int o=tmp;o!=0;o--)
tmp从第一次迭代的-1开始。因此需要大量迭代才能完成。这可能需要一段时间。另外,学习使用调试器。是的,我很抱歉,谢谢你指出这一点。(Ed Heal)你需要学习的一件事是如何调试代码。就在执行“特定函数[where]中的语句之前它只是停止工作“使用您的调试器检查特定语句访问的所有变量,确定任何指针是否有效,等等。这是您应该能够自己解决的问题。@CaptainGiraffe非常感谢Giraffe这似乎是代码的问题!!!我将研究什么是调试器,因为它可能会我不会从你们说的话中派上用场的。再次感谢!哇,我不知道该说什么。非常感谢你们这么做,并花你们的时间来帮助我!我会解决所有这些问题,还必须查找一些关于图书馆的资料,因为我似乎对它们知之甚少。祝你们好运!
    cin>>choice1;
    if ((choice1!=1)&&(choice1!=2)){
        cout<<"Invalid Input!\nTry again!\n";
    }
  }
  system ("cls");
  if (choice1==2){//End Program
    return 0;
  }
  cout<<"How many players?[2-6]"<<endl;
  while((i!=2)&&(i!=3)&&(i!=4)&&(i!=5)&&(i!=6)){//Makes sure that user enters correct input
    cin>>i;
    if ((i!=2)&&(i!=3)&&(i!=4)&&(i!=5)&&(i!=6)){
        cout<<"Invalid Input!\nTry again!\n";
    }
  }
  Player player[i];//creating array of players
  player[0].card_generator();
  max_i = i;//max_i is nb of players
  i--;//since arrays start at 0
  system("cls");

  player[0].set_final_card(i,max_i);
  player[0].print_cards();

  if (choice1==1) {//SET NAMES OF ALL PLAYERS
    for(i=0; i<max_i; i++){
        cout<< "Whats your name?\n";
        cin>>username;
        player[i].set_name(username);
        cout<<"Your name is "<< player[i].print_name()<< " and you have "<<                 player[i].print_bank()<<"$\n";

        tempV=i+1;//used bc arrays start at 0
        if(tempV!=max_i){
            cout<< "Give PC to player "<< i+2 <<endl;
        }
        _sleep(3000);
        system("cls");
    }
  }

  return 0;
}

    void Player::set_final_card(int i, int max_i){
    srand(time(NULL));
    int tempV = 17;//create temp cards
    string tempCards[tempV];
    int randNB[tempV];

    int check1 = 0, tmp;
    while (check1==0){
        for(int g=0; g<tempV;g++){

            tempCards[g]=cards[rand()%53];
            check1=1;
            tmp = g - 1;
            for(int o=tmp; o!=0; o--){
                if (tempCards[g]==tempCards[o]){
                  check1=0;
                }
            }
        }
    }